目前會先記錄一些,練習過程中實做的內容
這邊一樣是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')