前言
用 Flask 处理文件上传比较方便。已上传的文件存储在内存或是文件系统中一个临时的位置。你可以通过请求对象的 files 属性访问它们。每个上传的文件都会存储在这个字典里。它表现近乎为一个标准的 Python file 对象,但它还有一个 save() 方法,这个方法允许你把文件保存到服务器的文件系统上。
一、环境
redhat7.0 server2 172.25.27.2
系统自带python2.7
二、flask框架安装
这里示范的是virtualenv中的 Flask安装
virtualenv 为每个不同项目提供一份 Python 安装。它并没有真正安装多个 Python 副本,但是它确实提供了一种巧妙的方式来让各项目环境保持独立。
[root@localhost ~]# wget https://pypi.python.org/packages/source/s/setuptools/setuptools-7.0.tar.gz
[root@localhost ~]# wget https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
[root@localhost ~]# ls
pip-9.0.1.tar.gz setuptools-7.0.tar.gz
[root@localhost ~]# tar -zxf pip-9.0.1.tar.gz
[root@localhost ~]# tar -zxf setuptools-7.0.tar.gz
[root@localhost ~]# cd pip-9.0.1/
[root@localhost pip-9.0.1]# python setup.py install
[root@localhost pip-9.0.1]# cd ../setuptools-7.0/
[root@localhost setuptools-7.0]# python setup.py install
[root@localhost ~]# pip install virtualenv
[root@localhost ~]# mkdir myproject
[root@localhost ~]# cd myproject
[root@localhost myproject]# virtualenv venv
New python executable in /root/myproject/venv/bin/python
Installing setuptools, pip, wheel...done.
[root@localhost myproject]# . venv/bin/activate
(venv) [root@localhost myproject]#
现在应该已经激活了 virtualenv(注意你的 shell 提示符显示的是当前活动的环境)。
现在你只需要键入以下的命令来激活 virtualenv 中的 Flask:
(venv) [root@localhost myproject]# pip install Flask
要退出virtualenv环境用以下命令
(venv) [root@localhost myproject]# deactivate
[root@localhost myproject]#
三、部署开始
1.安装uWSGI
(venv) [root@localhost myproject]# yum install -y python-devel
(venv) [root@localhost myproject]# pip install uwsgi
2.创建上传程序
有pycharm就可以直接使用pycharm来写,非常方便,一个文件就搞定,程序代码如下
# -*- coding: utf-8 -*-
import os
from flask import Flask, request, url_for, send_from_directory
from werkzeug import secure_filename
ALLOWED_EXTENSIONS = set(['png', 'jpg', 'jpeg', 'gif'])
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = os.getcwd()
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
html = '''
<!DOCTYPE html>
<title>Upload File</title>
<h1>图片上传</h1>
<form method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit value=上传>
</form>
'''
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS
@app.route('/uploads/<filename>')
def uploaded_file(filename):
return send_from_directory(app.config['UPLOAD_FOLDER'],
filename)
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file']
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
file_url = url_for('uploaded_file', filename=filename)
return html + '<br><img src=' + file_url + '>'
return html
if __name__ == '__main__':
app.run()
3.关闭防火墙、iptables及selinux,然后在pycharm里直接运行,或者
python upload.py runserver 127.0.0.1:5000
4.验证上传文件
浏览器打开 127.0.0.1:5000
回到pycharm看刚才上传的文件,和代码放在了同一目录下,上传成功