webuploader與django進行斷點續傳

2022-06-12 01:06:13 字數 2625 閱讀 7401

webuploader與django進行斷點續傳

路由

from django.urls import path

from . import views

urlpatterns = [

path('index/',views.index),

path('checkchunk/',views.checkchunk,name='checkchunk'),

path('mergechunks/',views.mergechunks,name='mergechunks'),

path('upload/',views.upload,name='upload'),

]

檢視

# 檢查上傳分片是否重複,如果重複則不提交,否則提交

def checkchunk(request):

# post請求

if request.method == 'post':

# 獲得上傳檔案塊的大小,如果為0,就告訴他不要上傳了

chunksize = request.post.get("chunksize")

if chunksize == '0':

return jsonresponse()

# 如果檔案塊大小不為0 ,那麼就上傳,需要拼接乙個臨時檔案

file_name = request.post.get('filemd5')+request.post.get('chunk')

# 如果說這個檔案不在已經上傳的目錄,就可以上傳,已經存在了就不需要上傳。

if file_name not in get_deep_data():

return jsonresponse()

return jsonresponse()

# 判斷乙個檔案是否在乙個目錄下

def get_deep_data(path='static/upload/'):

result =

data = os.listdir(path)

for i in data:

if os.path.isdir(i):

get_deep_data(i)

else:

return result

# 前端上傳的分片 儲存到 指定的目錄下

def upload(request):

if request.method == 'post':

md5 = request.post.get("filemd5")

chunk_id = request.post.get("chunk","0")

filename = "%s-%s"%(md5,chunk_id)

file = request.files.get("file")

with open('static/upload/'+filename,'wb') as f:

for i in file.chunks():

f.write(i)

return jsonresponse()

# 將每次上傳的分片合併成乙個新檔案

def mergechunks(request):

if request.method == 'post':

# 獲取需要給檔案命名的名稱

filename = request.post.get("filename")

# 該上傳使用的md5碼值

md5 = request.post.get("filemd5")

id = request.post.get("fileid")

# 分片的序號

chunk = 0

# 完成的檔案的位址為

path = os.path.join('static','upload',filename)

with open(path,'wb') as fp:

while true:

try:

filename = 'static/upload/{}-{}'.format(md5,chunk)

with open(filename,'rb') as f:

fp.write(f.read())

# 當寫入完成後,分片就沒有意義了,刪除

os.remove(filename)

except:

break

chunk += 1

return jsonresponse()

前端

webuploader檔案上傳

序號檔名稱

檔案大小

上傳狀態

上傳進度

操作

選擇檔案

開始上傳

WebUploader上傳檔案

引入資源檔案 個,css檔案和js檔案。function inituploader 檔案接收服務端 pick btnpicker 選擇檔案的按鈕,內部根據當前執行是建立,可能是input元素,也可能是flash.dnd page body 指定drag and drop拖拽的容器 compress ...

webuploader上傳檔案

var var btn ctlbtn 開始上傳 var thumbnailwidth 100 縮圖高度和寬度 單位是畫素 當寬高度是0 1的時候,是按照百分比計算,具體可以看api文件 var thumbnailheight 100 var uploader webuploader.create 當...

webuploader使用詳解

單次支援最大上傳300張,不得不說功能強大。直接將這個資料夾丟在專案中public admin webuploader下 官網說了我們需要引入 然後你還需要乙個html容器來選擇需要上傳的 或將 拖到這裡,單次最多可選300張 0 開始上傳 當你將上述css,js,html引入專案中後可能會出現頁面...