您的位置:首页 > 编程语言 > Python开发

基于Flask实现文件的上传功能的多实例Web服务

2018-01-30 15:16 836 查看
flask是Python中非常轻量的Web框架,允许开发者以非常少的代码实现各类的Web应用,本文将简单实例一个简单Web的文件上传功能的开发。

环境介绍

Centos 7.2, virtual env 下的python 3。

安装flask

pip3 install flask

pip3 install flask_uploads

这里安装了flask相关的组件以及upload组件。

安装相关图片类库

pip3 install Pillow

安装部署gunicorn

由于Python中的GIL的存在,所以这里使用了gunicorn基于多进程来解决问题,实现高性能的Web服务支持。

安装gunicorn的服务

pip3 install gunicorn

启动脚本

nohup gunicorn -w 2 -b 0.0.0.0:9010 webapp.py:app &

nohup表示当前进程在terminal中断之后,仍然在后台运行。

-w 设置的子进程数量,2表示一共3个进程。

-b 当前web服务的地址以及端口,0.0.0.0表示当前的任意地址

webapp.py:app启动webapp.py中的flask应用。

-e key=val 将key/val作为环境变量传入os.environ之中,在Python代码中可以进行读取。

& 表示后台运行的。 只在terminal未中断之前生效。

上传的程序示例

from flask import Flask
from flask import send_file, send_from_directory
from flask_uploads import UploadSet, IMAGES, configure_uploads, patch_request_class
from flask import make_response, request
from werkzeug.utils import secure_filename

app = Flask(__name__)
tmp_image_path = "/home/xxxx/webapps/imagetmp"

logging.config.fileConfig("logging.conf")
logger = logging.getLogger("filelogger")

images = UploadSet('images', IMAGES)
app.config['MAX_CONTENT_LENGTH'] = 10*1024 * 1024
app.config['UPLOADED_IMAGES_DEST'] = tmp_image_path

configure_uploads(app, images)
patch_request_class(app)

@app.route("/V1/image/wing", methods=['POST'])
def testBytes():
file = request.files['fileData']
param1= request.form["is_param1"]
param2= request.form["param2"]
logger.info("incoming useMatting:" + str(useMatting))

# 这里变量都是数字型的,将被转换为boolean
param1 = False
if param1 == "1":
logger.info("set the flag:" + str(param1 ))
param1 = True

param2 = False
if param2 == "1":
param2 = True
logger.info("is_mask:" + str(param2))

#
#  业务逻辑操作等等
#
##imgByteArr是一个字节数组,返回了一个图片的字节数组

return send_file(imgByteArr, mimetype='image/png')

if __name__ == "__main__":
app.run()


这里虽然引入了secure_filename,这里并未使用,大家可以自行参考进行安全的过滤。

Tips

可以判断程序中的环境变量是否完全具备,如果不具备,则可以使用sys.exit(0),退出当前程序。

总结

这里的代码很简单,但是基本可以在其之上进行扩展,满足更为复杂的需求。

Reference

[1]. http://flask.pocoo.org/docs/0.12/installation/

[2]. https://pythonhosted.org/Flask-Uploads/ Flask Uploads
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python flask 文件上传