使用這個文件上傳接口,快捷地上傳您的文件

文件上傳是一項必要的功能,幾乎在所有的應用程序中都會用到。本篇文章將向您介紹一個快捷、便捷、安全的文件上傳接口,並為您提供完整的代碼示例。

一、選擇上傳文件

在使用文件上傳接口之前,首先需要實現文件選擇功能。在前端頁面中,可以使用HTML中的input標籤,並給其添加type=’file’屬性,如下所示:

<input type='file' name='file' />

在後端代碼中,可以使用Python中的flask框架,如下所示:

from flask import Flask, request
app = Flask(__name__)

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    file.save('uploads/' + file.filename)
    return 'upload success!'

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

上述代碼中,我們使用了flask框架來創建一個後端應用程序,並在其中實現了文件上傳的相關功能。其中,使用了request對象中的files屬性來獲取上傳的文件,並使用了save()方法將文件保存到指定的文件夾路徑。

二、限制文件上傳類型和大小

為了確保系統的安全性和穩定性,我們需要限制用戶上傳的文件類型和大小。在前端頁面中,我們可以使用HTML的accept屬性,如下所示:

<input type='file' name='file' accept='image/*' />

在後端代碼中,我們可以使用flask框架的request對象和werkzeug庫中的FileStorage對象,如下所示:

from flask import Flask, request
from werkzeug.utils import secure_filename

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']

@app.route('/upload', methods=['POST'])
def upload_file():
    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))
        return 'upload success!'
    else:
        return 'file type not allowed!'

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

上述代碼中,我們為應用程序設置了上傳文件的存儲路徑、允許上傳的文件類型和大小。並使用了allowed_file()方法來判斷上傳的文件類型是否在允許的列表中。如果是,則使用secure_filename()方法確保文件名的安全性,並使用save()方法保存文件到指定的文件夾路徑。如果不是,則返回錯誤信息。

三、進度顯示和斷點續傳

為了提高用戶體驗,我們可以為文件上傳添加進度顯示和斷點續傳的功能。在前端頁面中,可以使用HTML5自帶的XMLHttpRequest對象和FormData對象,並依賴於jQuery庫進行封裝,如下所示:

$('form').submit(function(e){
    e.preventDefault();
    var formData = new FormData(this);
    $.ajax({
        xhr: function() {
            var xhr = $.ajaxSettings.xhr();
            if(xhr.upload) {
                xhr.upload.addEventListener('progress', function(event) {
                    var percent = Math.floor(event.loaded / event.total * 100);
                    $('progress').attr('value', percent);
                    $('.progress-bar').width(percent + '%');
                    $('.progress-bar').text(percent + '%');
                }, false);
            }
            return xhr;
        },
        type: 'POST',
        url: '/upload',
        data: formData,
        processData: false,
        contentType: false,
        success: function(data) {
            alert(data);
        }
    });
});

在後端代碼中,我們需要使用flask框架的session對象來保存上傳文件的狀態和進度信息。代碼如下所示:

from flask import Flask, request, session
from werkzeug.utils import secure_filename
import os

app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = './uploads'
app.config['ALLOWED_EXTENSIONS'] = set(['txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'])
app.config['MAX_CONTENT_LENGTH'] = 16 * 1024 * 1024
app.secret_key = 'secret key'

def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']

@app.route('/upload', methods=['POST'])
def upload_file():
    file = request.files['file']
    if file and allowed_file(file.filename):
        filename = secure_filename(file.filename)
        file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
        if os.path.exists(file_path):
            session['upload_status'] = 'complete'
            return 'upload success!'
        else:
            if not session.get('upload_status'):
                session['upload_status'] = 'in progress'
                session['upload_size'] = 0
            file.save(file_path)
            session['upload_size'] += os.path.getsize(file_path)
            return str(session['upload_size'])
    else:
        return 'file type not allowed!'

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

上述代碼中,我們使用session對象來保存上傳文件的狀態和進度信息。首先,判斷上傳的文件是否已經存在於文件夾中,如果是,則直接返回成功信息。如果不是,則判斷session中是否保存了上傳狀態。如果沒有保存,則說明上傳開始,創建新的session對象,並將上傳狀態設置為’ in progress’。如果已經保存了,則說明上傳已經開始,繼續向文件中寫入數據,並累加上傳進度信息。最後,將上傳進度以字符串形式返回給前端頁面。

原創文章,作者:WCAR,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131380.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
WCAR的頭像WCAR
上一篇 2024-10-03 23:45
下一篇 2024-10-03 23:45

相關推薦

  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用 DRF 實現文件上傳

    文件上傳是 web 應用程序中最常見的需求之一,本文將介紹如何使用 Django Rest Framework (DRF) 來實現文件上傳。通過本文,你將學習到如何使用 DRF 中…

    編程 2025-04-28
  • Python接口自動化測試

    本文將從如下多個方面對Python編寫接口自動化進行詳細闡述,包括基本介紹、常用工具、測試框架、常見問題及解決方法 一、基本介紹 接口自動化測試是軟件測試中的一種自動化測試方式。通…

    編程 2025-04-27
  • jiia password – 保護您的密碼安全

    你是否曾經遇到過忘記密碼、密碼泄露等問題?jiia password 正是一款為此而生的解決方案。本文將從加密方案、密碼管理、多平台支持等多個方面,為您詳細闡述 jiia pass…

    編程 2025-04-27
  • Jadoor門鎖開發接口接入指南

    本文將從多個方面詳細介紹如何將門鎖接入Jadoor平台的開發接口,方便開發者們快速實現門鎖遠程控制、開鎖記錄查看等功能。 一、Jadoor門鎖開發接口簡介 Jadoor是一款用於密…

    編程 2025-04-27
  • 後端接口設計開發經驗分享

    在受到前端某些限制或特殊需求時,後端接口的設計和開發顯得尤為重要。下面從以下幾個方面進行講述。 一、命名規範 合理的命名規範可以大大提高接口的可讀性和可維護性。以下是一些命名規範的…

    編程 2025-04-27
  • 期貨數據接口 Python:打通數字資產交易數據的關鍵

    本文將從以下幾個方面討論期貨數據接口 Python: 一、數據接口簡介 期貨數據接口是指為期貨從業人員提供用於獲取歷史、實時及未來交易數據的工具。Python是一種常用的編程語言,…

    編程 2025-04-27
  • 如何快速發佈http接口

    想要快速發佈http接口,可以從以下幾個方面入手。 一、選擇合適的框架 選擇合適的框架對於快速發佈http接口非常重要。目前比較受歡迎的框架有Flask、Django、Tornad…

    編程 2025-04-27
  • Javaweb 接口返回數據的定義與實現

    本文將介紹 javaweb 如何定義接口返回數據,並提供相應的代碼示例。 一、接口返回數據的定義 在 javaweb 開發中,我們經常需要通過接口返回數據。接口返回的數據格式通常是…

    編程 2025-04-27
  • Postman接口自動化

    一、安裝和使用Postman Postman是一個強大的API測試工具,可以使用它來測試各種類型的API請求和響應。在進行接口自動化測試之前,首先需要安裝和使用Postman。以下…

    編程 2025-04-25

發表回復

登錄後才能評論