本文共 2717 字,大约阅读时间需要 9 分钟。
python3.6
django2.2.4
WebUploader文件上传组件:
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件
预览:
1、前端选择文件后自动上传的完整代码,不用点击开始上传
文件上传 选择文件
2、前端选择文件后需要点击上传的完整代码
Title 选择文件
from django.conf.urls import urlfrom django.contrib import adminfrom django.urls.conf import pathfrom up_test.views import *urlpatterns = [ url(r'^admin/', admin.site.urls), path('',index), path('upload', file_upload), # 文件分片上传 path('file_merge', file_merge) # 文件重组]
import osfrom django.core.files.base import ContentFilefrom django.core.files.storage import default_storagefrom django.shortcuts import render, render_to_response# Create your views here.from django.views.decorators.csrf import csrf_exemptdef index(request): return render(request,'index.html')@csrf_exemptdef file_upload(request): if request.method == 'POST': upload_file = request.FILES.get('file') task = request.POST.get('task_id') # 获取文件唯一标识符 chunk = request.POST.get('chunk', 0) # 获取该分片在所有分片中的序号 filename = '%s%s' % (task, chunk) # 构成该分片唯一标识符 print("filename=", filename) default_storage.save('./upload/%s' % filename, ContentFile(upload_file.read())) # 保存分片到本地 return render_to_response('index.html', locals())@csrf_exemptdef file_merge(request): print(request.GET) task = request.GET.get('task_id') ext = request.GET.get('filename', '') upload_type = request.GET.get('type') if len(ext) == 0 and upload_type: ext = upload_type.split('/')[1] ext = '' if len(ext) == 0 else '_%s' % ext # 构建文件后缀名 chunk = 0 with open('./upload/%s%s' % (task, ext), 'wb') as target_file: # 创建新文件 while True: try: filename = './upload/%s%d' % (task, chunk) source_file = open(filename, 'rb') # 按序打开每个分片 target_file.write(source_file.read()) # 读取分片内容写入新文件 source_file.close() except IOError: break chunk += 1 os.remove(filename) # 删除该分片,节约空间 # 分片重组后文件重命名 path = os.path.dirname(os.path.dirname(__file__)) old_name = task+ext ext = ext.replace('_','') new_name = '' print(path + '\\upload\\' + old_name) print(path + '\\upload\\' + new_name) os.rename(path + '\\upload\\' + old_name, path + '\\upload\\' + new_name) return render_to_response('index.html', locals())
转载地址:http://lwwsi.baihongyu.com/