使用 Flask-Uploads + jQuery + Bootstrap 創(chuàng)建帶進度條的文件上傳

Flask-Uploads allows your application to flexibly and efficiently handle file uploading and serving the uploaded files. You can create different sets of uploads - one for document attachments, one for photos, etc. - and the application can be configured to save them all in different places and to generate different URLs for them.

環(huán)境及版本號:

  • python 2.7.10
  • Flask==0.11.1
  • Flask-Uploads==0.2.1

上傳效果圖:


后臺邏輯代碼:

# main.py
# coding:utf-8
from flask import Flask, render_template, request
from flask_uploads import UploadSet, configure_uploads, ALL

app = Flask(__name__)

files = UploadSet('files', ALL)
app.config['UPLOADS_DEFAULT_DEST'] = 'uploads'

configure_uploads(app, files)


@app.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST' and 'media' in request.files:
        filename = files.save(request.files['media'])
        url = files.url(filename)
    return render_template('upload.html')


if __name__ == '__main__':
    app.run(debug=True)

前端模板代碼:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Upload</title>
    <link rel="stylesheet" >
    <script src="http://cdn.bootcss.com/jquery/1.11.1/jquery.min.js"></script>
    <script src="http://cdn.bootcss.com/bootstrap/3.3.0/js/bootstrap.min.js"></script>
</head>
<body>
<form action="{{url_for('upload')}}" method="POST" enctype="multipart/form-data">
    <input type="file" id="media" name="media">
    <input type="submit">
</form>
<div class="progress" style="display: none;">
    <div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">
        0%
    </div>
</div>
<script type="text/javascript">
    $('form').on('submit', function (event) {
        // 顯示進度條
        $('.progress').css('display', 'block');
        // 阻止元素發(fā)生默認的行為映之,此處用來阻止對表單的提交
        event.preventDefault();
        var formData = new FormData(this);
        // jQuery Ajax 上傳文件炸枣,關鍵在于設置:processData 和 contentType
        $.ajax({
            xhr: function () {
                var xhr = new XMLHttpRequest();
                xhr.upload.addEventListener('progress', function (e) {
                    if (e.lengthComputable) {
                        var percent = Math.round(e.loaded * 100 / e.total);
                        $('.progress-bar').attr('aria-valuenow', percent).css('width', percent + '%').text(percent + '%');
                    }
                });
                return xhr;
            },
            type: 'POST',
            url: '/upload',
            cache: false,
            data: formData,
            // 告訴 jQuery 不要去處理發(fā)送的數(shù)據(jù)
            processData: false,
            // 告訴 jQuery 不要去設置 Content-Type 請求頭
            // 因為這里是由 <form> 表單構造的 FormData 對象螟碎,且已經(jīng)聲明了屬性 enctype="multipart/form-data"结蟋,所以設置為 false
            contentType: false
        }).done(function (res) {
            alert('上傳成功!');
        }).fail(function (res) {
            alert('上傳失敗!');
        });
    });
</script>
</body>
</html>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌摔吏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件纵装,死亡現(xiàn)場離奇詭異舔腾,居然都是意外死亡,警方通過查閱死者的電腦和手機搂擦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門稳诚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人瀑踢,你說我怎么就攤上這事扳还。” “怎么了橱夭?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵氨距,是天一觀的道長。 經(jīng)常有香客問我棘劣,道長俏让,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮首昔,結果婚禮上寡喝,老公的妹妹穿的比我還像新娘。我一直安慰自己勒奇,他們只是感情好预鬓,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赊颠,像睡著了一般格二。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上竣蹦,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天顶猜,我揣著相機與錄音,去河邊找鬼痘括。 笑死长窄,一個胖子當著我的面吹牛,可吹牛的內容都是我干的远寸。 我是一名探鬼主播抄淑,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼屠凶,長吁一口氣:“原來是場噩夢啊……” “哼驰后!你這毒婦竟也來了?” 一聲冷哼從身側響起矗愧,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤灶芝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后唉韭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體夜涕,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年属愤,在試婚紗的時候發(fā)現(xiàn)自己被綠了女器。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡住诸,死狀恐怖驾胆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情贱呐,我是刑警寧澤丧诺,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站奄薇,受9級特大地震影響驳阎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一呵晚、第九天 我趴在偏房一處隱蔽的房頂上張望蜘腌。 院中可真熱鬧,春花似錦劣纲、人聲如沸逢捺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽劫瞳。三九已至,卻和暖如春绷柒,著一層夾襖步出監(jiān)牢的瞬間志于,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工废睦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留伺绽,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓嗜湃,卻偏偏與公主長得像奈应,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子购披,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內容