Python的Django中將文件上傳至七牛云存儲的代碼分享
最近在寫的一個django小項目需要實現(xiàn)用戶上傳圖片的功能,使用到了七牛云存儲,特此記錄下來。這里我使用的七牛python SDK 版本是7.0.3,函數(shù)使用上可能會與舊版有些不同。
原本文件上傳需要先把文件上傳到自己的業(yè)務服務器,再從業(yè)務服務器上傳到云存儲?,F(xiàn)在七牛的表單上傳可以直接把文件上傳到七牛,不再需要業(yè)務服務器的中轉,節(jié)省了流量成本,降低了業(yè)務服務器的壓力。而且通過設置,還可以在文件上傳完成后讓客戶端自動重定向到一個上傳成功的結果頁面。這里我就是使用了七牛的表單上傳。
表單上傳
用戶上傳圖片的HTML表單代碼如下。其中key用來指定圖片保存在七牛中的文件名,token是上傳憑證,即用來驗證合法性和設置返回信息的。
upload.html
<form method="POST" action="http://upload.qiniu.com/" enctype="multipart/form-data"> <input name="key" type="hidden" value=""> <input name="token" type="hidden" value=""> <input name="file" type="file"> <input type="submit"> </form>
跳轉到上面HTML頁面的視圖函數(shù)中的關鍵代碼如下。其中upload_token函數(shù)用于生成表單里的token字段,upload_token函數(shù)中的7200代表上傳憑證的有效期,returnUrl表示上傳成功后的重定向地址,returnBody表示重定向時七牛返回的信息,它是一個base64編碼后的json數(shù)據(jù),需要解碼獲取json數(shù)據(jù),當上傳出錯時錯誤信息直接在url中以明文的形式出現(xiàn),并不會在返回的json數(shù)據(jù)里。通過設置mimeLimit還可以限制上傳文件的類型。
views.py
import qiniu
import uuid
ACCESS_KEY = '七牛分配的公鑰'
SECRET_KEY = '七牛分配的私鑰'
BUCKET_NAME = '保存文件的倉庫名'
key = str(uuid.uuid1()).replace('-', '') # 這里使用uuid作為保存在七牛里文件的名字。并去掉了uuid中的“-”
q = qiniu.Auth(ACCESS_KEY, SECRET_KEY)
token = q.upload_token(BUCKET_NAME, key, 7200, {'returnUrl':'http://127.0.0.1:8000/photos/uploadprocessor', 'returnBody': '{"name": $(fname), "key": $(key)}', 'mimeLimit':'image/jpeg;image/png'})
return render_to_response('photos/upload.html', {'token': token, 'key': key}, context_instance=RequestContext(request))
相關文章
Python中sorted()函數(shù)之排序的利器詳解
sorted()函數(shù)是Python中的內(nèi)置函數(shù),用于對可迭代對象進行排序,下面這篇文章主要給大家介紹了關于Python中sorted()函數(shù)之排序的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-08-08
Python使用pyenv實現(xiàn)多環(huán)境管理
這篇文章主要介紹了Python使用pyenv實現(xiàn)多環(huán)境管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02

