flask框架應用之--文件上傳

前言

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

在這裏插入圖片描述在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章