基于Flask實(shí)現(xiàn)文件上傳七牛云中并下載
在Flask中實(shí)現(xiàn)文件上傳和七牛云集成
文件上傳是Web應(yīng)用中常見的功能之一,而七牛云則提供了強(qiáng)大的云存儲(chǔ)服務(wù),使得文件存儲(chǔ)和管理變得更加便捷。在本篇博客中,我們將學(xué)習(xí)如何在Flask應(yīng)用中實(shí)現(xiàn)文件上傳,并將上傳的文件保存到七牛云。
步驟 1: 安裝所需庫
首先,確保已安裝Flask、SQLAlchemy(如果需要數(shù)據(jù)庫支持)、以及七牛云的Python SDK??梢允褂胮ip進(jìn)行安裝:
pip install Flask Flask-SQLAlchemy qiniu
步驟 2: 設(shè)置Flask應(yīng)用
在Flask應(yīng)用中,我們需要配置數(shù)據(jù)庫(如果有)、七牛云以及路由來處理文件上傳。這包括設(shè)置七牛云的 access_key
、secret_key
、bucket_name
以及域名。
from flask import Flask, request from flask_sqlalchemy import SQLAlchemy from qiniu import Auth, put_data app = Flask(__name__) app.config['SECRET_KEY'] = 'your-secret-key' # 設(shè)置Flask的秘鑰 # 配置SQLAlchemy數(shù)據(jù)庫 app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@hostname/database' db = SQLAlchemy(app) # 配置七牛云 auth = Auth(access_key='your-access-key', secret_key='your-secret-key') bucket_name = 'your-bucket-name' domain = 'your-domain'
確保替換 your-secret-key
、your-access-key
、your-bucket-name
和 your-domain
為你的七牛云配置信息。分別是公鑰,私鑰,空間id,域名.其中公鑰和私鑰在個(gè)人中心-秘鑰管理查看.而空間id就是你的存儲(chǔ)空間的名字.
步驟 3: 編寫上傳下載文件路由
編寫一個(gè)路由,允許用戶上傳文件到七牛云。我們將使用 put_file
函數(shù)來實(shí)現(xiàn)文件的直接上傳。注意,你可以根據(jù)需要添加其他驗(yàn)證邏輯。
@app.route('/upload', methods=['POST']) def upload(): if 'file' not in request.files: return "沒有文件部分" file = request.files['file'] if file.filename == '': return "沒有選擇文件" with file.stream as data: token = auth.upload_token(bucket_name, file.filename) ret, info =put_file(token, file.filename, data) if info.status_code == 200: file_url = f'http://{domain}/{file.filename}' return f'文件上傳成功!<a href="{file_url}" rel="external nofollow" >查看文件</a>' else: return "文件上傳失敗"
這個(gè)路由接受POST請(qǐng)求中的文件,并使用 put_file
函數(shù)將文件上傳到七牛云。如果上傳成功,它會(huì)返回如圖所示
key為文件名稱hash為tag.
接下來就是下載文件.
from qiniu import Auth access_key = 'your_AK' # 替換為你的 Access Key secret_key = 'your_SK' # 替換為你的 Secret Key q = Auth(access_key, secret_key) bucket_name = 'your_bucket_name' # 替換為你的 bucket 的名字 file_name = 'your_file_name' # 替換為你要下載的文件名 # 生成下載鏈接,有效期為 3600s private_url = q.private_download_url('http://'+ bucket_name +'.qiniudn.com/'+ file_name, expires=3600) print(private_url)
這段代碼會(huì)輸出一個(gè) URL,你可以在瀏覽器中打開這個(gè) URL 來下載文件。請(qǐng)注意,這個(gè) URL 在生成后的一小時(shí)內(nèi)有效。
而如果想在 Flask 中實(shí)現(xiàn)文件下載,我們可以創(chuàng)建一個(gè)路由來處理下載請(qǐng)求:
from flask import Flask, redirect app = Flask(__name__) @app.route('/download/<file_name>') def download(file_name): private_url = q.private_download_url('http://'+ bucket_name +'.qiniudn.com/'+ file_name, expires=3600) return redirect(private_url)
然后,我們可以通過訪問 http://your_server_address/download/your_file_name
來下載文件。
步驟 4: 創(chuàng)建HTML表單
最后,創(chuàng)建一個(gè)HTML表單,允許用戶選擇文件并將其上傳到你的Flask應(yīng)用。你可以根據(jù)需要自定義表單樣式。
<!DOCTYPE html> <html> <head> <title>文件上傳</title> </head> <body> <form method="POST" action="/upload" enctype="multipart/form-data"> <input type="file" name="file"> <input type="submit" value="上傳文件"> </form> </body> </html>
這段代碼構(gòu)建了一個(gè)簡(jiǎn)單的上傳表單,其中包含一個(gè)文件選擇字段和一個(gè)提交按鈕以方便我們觸發(fā)上傳。
通過按照上述步驟,就可以在Flask應(yīng)用中實(shí)現(xiàn)文件上傳和下載,將上傳的文件保存到七牛云并下載。
到此這篇關(guān)于基于Flask實(shí)現(xiàn)文件上傳七牛云中并下載的文章就介紹到這了,更多相關(guān)Flask文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python分析inkscape路徑數(shù)據(jù)方案簡(jiǎn)單介紹
這篇文章主要介紹了python分析inkscape路徑數(shù)據(jù)方案簡(jiǎn)單介紹,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下2022-09-09Python接口自動(dòng)化淺析如何處理動(dòng)態(tài)數(shù)據(jù)
本文是python接口自動(dòng)化系列文章,主要介紹了接口自動(dòng)化過程中,動(dòng)態(tài)數(shù)據(jù)如何生成、動(dòng)態(tài)數(shù)據(jù)與數(shù)據(jù)庫數(shù)據(jù)進(jìn)行對(duì)比并替換,有需要的朋友可以參考下2021-08-08一文帶你精通Python中*args和**kwargs的應(yīng)用技巧
如果能在Python中創(chuàng)建適應(yīng)不同場(chǎng)景的函數(shù),而無需每次都重寫它們,會(huì)使得操作簡(jiǎn)潔方便,這就是*args和**kwargs的魔力所在,下面我們就來看看它們的具體一些應(yīng)用技巧吧2024-03-03selenium?UI自動(dòng)化實(shí)戰(zhàn)過程記錄
如果大家有做過web的自動(dòng)化測(cè)試,相信對(duì)于selenium一定不陌生,測(cè)試人員經(jīng)常使用它來進(jìn)行自動(dòng)化測(cè)試,下面這篇文章主要給大家介紹了關(guān)于selenium?UI自動(dòng)化實(shí)戰(zhàn)的相關(guān)資料,需要的朋友可以參考下2021-12-12在服務(wù)器上安裝python3.8.2環(huán)境的教程詳解
這篇文章主要介紹了在服務(wù)器上安裝python3.8.2環(huán)境的教程詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04Python中__str__()方法的實(shí)用技巧分享
在Python編程中,__str__()是一個(gè)特殊方法,它允許自定義對(duì)象的字符串表示形式,本文將深入探討__str__()的相關(guān)實(shí)用技巧,希望對(duì)大家有所幫助2023-11-11