下面是Flask接收上传图片的完整攻略。
准备工作
首先,我们需要先安装Flask的插件Flask-Uploads
,可以通过pip直接安装,命令如下:
pip install Flask-Uploads
安装完成后,在Flask的应用中引入该插件:
from flask_uploads import UploadSet, configure_uploads, IMAGES
app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img' # 存放上传图片的文件夹
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
其中,UploadSet
用于初始化上传文件集合,configure_uploads
用于设置上传文件存放的目录。IMAGES
则表示只允许上传图片文件。
方法一:基本文件上传
HTML文件
首先在HTML文件中需要有一个上传图片的表单,示例代码如下:
<form action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="submit" value="上传">
</form>
其中,action
的值为Flask框架中负责处理上传操作的URL,命名为upload()
,示例代码如下:
from flask import request
@app.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST' and 'photo' in request.files:
filename = photos.save(request.files['photo']) # 保存图片并返回文件名
return 'File successfully uploaded!'
return 'Failed to upload file!'
在upload()
中,首先需要判断请求方式是否为POST
,以及上传的文件是否存在。接着,使用save()
方法保存图片文件,并返回文件名。
最后在响应中返回上传成功或上传失败的信息。
Markdown文件
以下是基于Flask的上传图片方法一的完整示例代码:
from flask import Flask, request
from flask_uploads import UploadSet, configure_uploads, IMAGES
app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
@app.route('/', methods=['GET'])
def index():
return '''
<h1>文件上传示例</h1>
<form action="{{ url_for('upload') }}" method="POST" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="submit" value="上传">
</form>
'''
@app.route('/upload', methods=['POST'])
def upload():
if request.method == 'POST' and 'photo' in request.files:
filename = photos.save(request.files['photo'])
return 'File successfully uploaded!'
return 'Failed to upload file!'
if __name__ == '__main__':
app.run()
方法二:图片压缩上传
模块安装
在压缩上传图片之前,我们需要安装python的另一个模块Pillow
,可以通过pip直接安装,命令如下:
pip install Pillow
Python文件
在Python文件中新增一个压缩参数photo_size
,用户可以自定义图片压缩的尺寸。示例代码如下:
from PIL import Image # 导入Image模块
@app.route('/compress_upload', methods=['POST'])
def compress_upload():
if request.method == 'POST' and 'photo' in request.files:
# 保存压缩图片
file = request.files['photo']
filename = photos.save(file)
img = Image.open(file)
img.thumbnail(photo_size) # 压缩图片
img.save(os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename))
return 'File successfully uploaded!'
return 'Failed to upload file!'
在compress_upload()
方法中,读取图片文件后,使用Pillow
中的thumbnail()
方法进行图片的压缩,压缩后的图片保存至uploads
目录中。
最后在响应中返回上传成功或上传失败的信息。
HTML文件
在HTML文件中,修改表单中action
为负责处理压缩上传操作的URL,命名为compress_upload()
,同时添加一个hidden
类型的输入框,用于保存用户指定的压缩尺寸值。示例代码如下:
<form action="{{ url_for('compress_upload') }}" method="POST" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="hidden" name="photo_size" value="200x200"> <!-- 自定义压缩尺寸 -->
<input type="submit" value="上传">
</form>
Markdown文件
以下是基于Flask的压缩上传图片方法二的完整示例代码:
import os
from PIL import Image
from flask import Flask, request
from flask_uploads import UploadSet, configure_uploads, IMAGES
app = Flask(__name__)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
photos = UploadSet('photos', IMAGES)
configure_uploads(app, photos)
photo_size = (200, 200) # 压缩图片尺寸
@app.route('/', methods=['GET'])
def index():
return '''
<h1>文件上传示例</h1>
<form action="{{ url_for('compress_upload') }}" method="POST" enctype="multipart/form-data">
<input type="file" name="photo">
<input type="hidden" name="photo_size" value="200x200">
<input type="submit" value="上传">
</form>
'''
@app.route('/compress_upload', methods=['POST'])
def compress_upload():
if request.method == 'POST' and 'photo' in request.files:
# 保存压缩图片
file = request.files['photo']
filename = photos.save(file)
img = Image.open(file)
img.thumbnail(photo_size)
img.save(os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename))
return 'File successfully uploaded!'
return 'Failed to upload file!'
if __name__ == '__main__':
app.run()
以上就是Flask接收上传图片方法实现的完整攻略,希望能对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask接收上传图片方法实现 - Python技术站