使用Python和FastAPI實(shí)現(xiàn)MinIO斷點(diǎn)續(xù)傳功能
前言
在分布式存儲(chǔ)和大數(shù)據(jù)應(yīng)用中,斷點(diǎn)續(xù)傳是一個(gè)重要的功能,它允許大文件上傳在中斷后可以從中斷點(diǎn)恢復(fù),而不是重新上傳整個(gè)文件。本文將介紹如何使用Python封裝MinIO的斷點(diǎn)續(xù)傳方法,并使用FastAPI創(chuàng)建一個(gè)API接口,最后使用Axios調(diào)用該接口。
步驟1:安裝必要的Python庫(kù)
首先,我們需要安裝minio
和fastapi
庫(kù)。
pip install minio fastapi uvicorn
步驟2:封裝MinIO斷點(diǎn)續(xù)傳方法
我們將創(chuàng)建一個(gè)Python函數(shù),用于處理文件的斷點(diǎn)續(xù)傳。
from minio import Minio from minio.error import S3Error def minio_client(): return Minio( "play.min.io", access_key="your-access-key", secret_key="your-secret-key", secure=True ) def upload_file_with_resume(client, bucket_name, object_name, file_path, part_size=10*1024*1024): upload_id = client.initiate_multipart_upload(bucket_name, object_name) try: with open(file_path, "rb") as file_data: part_number = 1 while True: data = file_data.read(part_size) if not data: break client.put_object(bucket_name, f"{object_name}.{part_number}", data, len(data), part_number=part_number, upload_id=upload_id) part_number += 1 client.complete_multipart_upload(bucket_name, object_name, upload_id) except S3Error as exc: client.abort_multipart_upload(bucket_name, object_name, upload_id) raise exc
代碼解釋?zhuān)?/strong>
minio_client
函數(shù)創(chuàng)建并返回一個(gè)MinIO客戶(hù)端實(shí)例。upload_file_with_resume
函數(shù)接受文件路徑和存儲(chǔ)桶信息,使用MinIO客戶(hù)端進(jìn)行分塊上傳。- 如果上傳過(guò)程中發(fā)生錯(cuò)誤,將終止上傳并拋出異常。
步驟3:使用FastAPI創(chuàng)建API接口
接下來(lái),我們將使用FastAPI創(chuàng)建一個(gè)API接口,用于接收文件并調(diào)用我們的斷點(diǎn)續(xù)傳函數(shù)。
from fastapi import FastAPI, File, UploadFile from fastapi.responses import JSONResponse app = FastAPI() @app.post("/upload/") async def upload_file(file: UploadFile = File(...)): try: client = minio_client() upload_file_with_resume(client, "my-bucketname", file.filename, file.file._file.name) return JSONResponse(status_code=200, content={"message": "File uploaded successfully"}) except Exception as e: return JSONResponse(status_code=500, content={"error": str(e)})
代碼解釋?zhuān)?/strong>
- FastAPI應(yīng)用創(chuàng)建了一個(gè)
/upload/
路由,接受POST請(qǐng)求。 file: UploadFile = File(...)
參數(shù)表示我們期望接收一個(gè)文件。upload_file_with_resume
函數(shù)被調(diào)用來(lái)處理上傳。- 如果上傳成功,返回成功消息;如果失敗,返回錯(cuò)誤信息。
步驟4:使用Axios調(diào)用FastAPI接口
在客戶(hù)端,我們將使用Axios來(lái)調(diào)用FastAPI創(chuàng)建的接口。
async function uploadFileToMinIO(file) { const formData = new FormData(); formData.append('file', file); try { const response = await axios.post('http://localhost:8000/upload/', formData, { headers: { 'Content-Type': 'multipart/form-data' } }); console.log(response.data); } catch (error) { console.error('Error uploading file:', error); } } // 調(diào)用函數(shù)上傳文件 const fileInput = document.getElementById('fileInput'); fileInput.addEventListener('change', async (event) => { const file = event.target.files[0]; await uploadFileToMinIO(file); });
代碼解釋?zhuān)?/strong>
- 我們創(chuàng)建了一個(gè)
uploadFileToMinIO
函數(shù),它使用Axios發(fā)送POST請(qǐng)求到FastAPI服務(wù)器。 FormData
對(duì)象用于構(gòu)建包含文件數(shù)據(jù)的請(qǐng)求體。- 如果上傳成功,打印響應(yīng)數(shù)據(jù);如果失敗,打印錯(cuò)誤信息。
注意事項(xiàng)
- 安全性:確保在生產(chǎn)環(huán)境中使用HTTPS,并正確配置訪問(wèn)密鑰和秘密密鑰。
- 錯(cuò)誤處理:增強(qiáng)錯(cuò)誤處理邏輯,以?xún)?yōu)雅地處理各種異常情況。
- 性能優(yōu)化:根據(jù)實(shí)際需求調(diào)整分塊大小,以?xún)?yōu)化上傳性能。
總結(jié)
本文介紹了如何使用Python和FastAPI實(shí)現(xiàn)MinIO的斷點(diǎn)續(xù)傳功能,并使用Axios調(diào)用API接口。通過(guò)封裝MinIO的分塊上傳邏輯,我們可以有效地處理大文件上傳,并在上傳過(guò)程中斷后從中斷點(diǎn)恢復(fù)。FastAPI提供了一個(gè)簡(jiǎn)潔的API接口,而Axios則方便地從客戶(hù)端發(fā)起請(qǐng)求。這種方法為處理大規(guī)模數(shù)據(jù)提供了強(qiáng)大的支持,使得MinIO成為數(shù)據(jù)密集型應(yīng)用的理想選擇。
以上就是使用Python和FastAPI實(shí)現(xiàn)MinIO斷點(diǎn)續(xù)傳功能的詳細(xì)內(nèi)容,更多關(guān)于Python和FastAPI MinIO斷點(diǎn)續(xù)傳的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
淺談python下含中文字符串正則表達(dá)式的編碼問(wèn)題
今天小編就為大家分享一篇淺談python下含中文字符串正則表達(dá)式的編碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12python中實(shí)現(xiàn)定時(shí)任務(wù)的幾種方案
本文呢給大家總結(jié)以下幾種方案實(shí)現(xiàn)定時(shí)任務(wù),可根據(jù)不同需求去使用不同方案,文章通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以參考下2023-10-10OpenCV-Python直方圖均衡化實(shí)現(xiàn)圖像去霧
直方圖均衡化可以達(dá)到增強(qiáng)圖像顯示效果的目的。最常用的比如去霧。本文就來(lái)實(shí)現(xiàn)直方圖均衡化實(shí)現(xiàn)圖像去霧,感興趣的可以了解一下2021-06-06使用 Python 和 OpenCV 實(shí)現(xiàn)實(shí)時(shí)人臉識(shí)別功能
本文詳細(xì)講解了使用Python和OpenCV庫(kù)實(shí)行實(shí)時(shí)人臉識(shí)別的過(guò)程,首先,確保安裝OpenCV庫(kù),并通過(guò)Haar級(jí)聯(lián)分類(lèi)器進(jìn)行人臉檢測(cè),實(shí)現(xiàn)步驟包括打開(kāi)攝像頭、圖像灰度轉(zhuǎn)換、人臉檢測(cè)及繪制矩形框,代碼示例清晰展示了從設(shè)置攝像頭到最終展示檢測(cè)結(jié)果的完整過(guò)程2024-11-11Python+wxPython實(shí)現(xiàn)將圖片轉(zhuǎn)換為草圖
將照片轉(zhuǎn)換為藝術(shù)風(fēng)格的草圖是一種有趣的方式,可以為您的圖像添加獨(dú)特的效果,本文主要介紹了如何Python和wxPython來(lái)實(shí)現(xiàn)這一目標(biāo),需要的可以參考下2023-08-08