前言
用 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看剛纔上傳的文件,和代碼放在了同一目錄下,上傳成功