基于Flask实现文件的上传功能的多实例Web服务
2018-01-30 15:16
836 查看
flask是Python中非常轻量的Web框架,允许开发者以非常少的代码实现各类的Web应用,本文将简单实例一个简单Web的文件上传功能的开发。
pip3 install flask_uploads
这里安装了flask相关的组件以及upload组件。
安装相关图片类库
pip3 install Pillow
安装gunicorn的服务
pip3 install gunicorn
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未中断之前生效。
这里虽然引入了secure_filename,这里并未使用,大家可以自行参考进行安全的过滤。
[2]. https://pythonhosted.org/Flask-Uploads/ Flask Uploads
环境介绍
Centos 7.2, virtual env 下的python 3。安装flask
pip3 install flaskpip3 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
相关文章推荐
- Java与WebUploader相结合实现文件上传功能(实例代码)
- JavaWeb中struts2实现文件上传下载功能实例解析
- 【CSDN开源夏令营】 基于Web的SSH客户端,实现跨平台的云服务管理(四)文件树功能的实现
- AJAX实现基于WEB的文件上传的进度控制
- Jquery AjaxUpload实现文件上传功能代码实例教程
- 基于struts 的FormFile实现文件的上传功能
- AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- 实例详解LB基于LVS架构之NAT、DR模型架构实现web服务负载均衡
- AJAX实现基于WEB的文件上传的进度控制
- php实现文件上传功能的代码实例
- AJAX实现基于WEB的文件上传的进度控制
- AJAX实现基于WEB的文件上传的进度控制
- java resteasy restful webservice教程(六):实现文件下载功能实例文章来源:爱上123 原文地址:http://www.ishang123.com/jishubowen/
- java实例:第三方插件实现文件批量上传功能
- AJAX和JSP实现的基于WEB的文件上传的进度控制代码第1/2页
- 基于struts2实现文件上传功能
- AJAX和JSP实现的基于WEB的文件上传的进度控制代码第1/2页
- query AjaxUpload实现多文件上传功能代码实例教程
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名