iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
自我挑戰組

全端網頁-入職三十天學習筆記系列 第 12

【全端網頁開發】Day12-Flask實作使用者上傳文件回傳壓縮檔

  • 分享至 

  • xImage
  •  

前言

目前會先記錄一些,練習過程中實做的內容

實作使用者上傳文件回傳壓縮檔

這邊一樣是blueprint的寫法
因此重點在HTML跟Python的/compression這段

1.撰寫一個頁面images.html
提供使用者將文件檔案上傳
(這邊的action="/images/compression"要記得加前綴URL)

image.html:

<!DOCTYPE html>
<html>
<head>
    <title>照片處理</title>
</head>
<body>
    <h1>上傳文件</h1>
    <form method="POST" action="/images/compression" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="上傳">
    </form>
</body>
</html>

2.新增一個uploas資料夾為上傳至本地的路徑

3.再來是py檔的部分,先確認是否使用者有成功選取上傳的文件

4.設定上傳文件的目錄,同時設定壓縮文件的路徑

5.與上一篇方式一樣將文件進行壓縮回傳

views_images.py:

@images.route('/compression', methods=['post'])
def compression_file():
    if 'file' not in request.files:
        return '没有選擇文件'

    file = request.files['file']
    if file.filename == '':
        return '没有選擇文件'

    if file:
        upload_folder = 'uploads'  #上傳文件的路徑
        # 上傳的文件存到指定目錄
        file_path = os.path.join(upload_folder, file.filename)
        file.save(file_path)
        
        # 創建壓縮文件
        zip_buffer = io.BytesIO()  
        with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_STORED) as zipf:
            zipf.write(file_path, arcname=file.filename)

        zip_buffer.seek(0) 
        return send_file(zip_buffer, as_attachment=True, download_name=f'{file.filename}.zip')

上一篇
【全端網頁開發】Day11-Flask實作提供下載圖片ZIP的API
下一篇
【全端網頁開發】Day13-PostgreSQL實做partition table分區表
系列文
全端網頁-入職三十天學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言