Django2.0.4+Uploadify3.0(h5版) 实现多文件异步上传和删除
已经9012年了,如果你的网站还通过传统表单上传文件的话,那你简直low到爆了,也别干什么web开发了,直接面壁去吧。
本文基于Uploadify异步上传控件来实现多文件异步上传的无刷新机制,用来提高效率和用户体验,由于uploadify基于jquery,所以确保已经引入了稳定版的Jquery,另外需要说明的是,uploadify分为flash版和h5版,鉴于flash早就已经被淘汰了,所以h5才是我们的选择,但是h5版居然需要收费,下一个要五美刀,我们当然不能当冤大头,可以考虑去下载一个免费的山寨开源版:https://github.com/Double-Lv/Huploadify
前端代码:
{# 载入js库 #} <script src='{% static "js/jquery-1.12.1.min.js" %}'></script> <script src='{% static "js/jquery.Huploadify.js" %}'></script> <body> <input type="text" value="100" id="t1"> <div id="upload"></div> <script> let name = $("#t1").val(); var up = $('#upload').Huploadify({ auto:false, fileTypeExts:'*.*', multi:true, fileSizeLimit:99999999999, showUploadedPercent:true, formData:{'name':'123'}, showUploadedSize:true, removeTimeout:9999999, method: 'post', uploader:'/md_admin/upload_img', onUploadStart:function(file){ console.log(file.name+'开始上传'); //$("#upload").Huploadify("settings","formData",{'name':'someValue'}); uploadify_option.formData={name:'0'}; }, onInit:function(obj){ console.log('初始化'); console.log(obj); }, onUploadComplete:function(file){ console.log(file.name+'上传完成'); }, onCancel:function(file){ console.log(file.name+'删除成功'); }, onClearQueue:function(queueItemCount){ console.log('有'+queueItemCount+'个文件被删除了'); }, onDestroy:function(){ console.log('destroyed!'); }, onSelect:function(file){ console.log(file.name+'加入上传队列'); }, onQueueComplete:function(queueData){ console.log('队列中的文件全部上传完成',queueData); } }); </script> </body>
后台视图文件:
#定义上传视图类 class UploadTest(View): #定义上传方法 def post(self,request): #接收文件,以对象的形式 img = request.FILES.get("file") print(request.POST.get('name','未收到参数')) #文件名称是name属性 #建立文件流对象 f = open(os.path.join(UPLOAD_ROOT,'',img.name),'wb') #写文件 遍历图片文件流 for chunk in img.chunks(): f.write(chunk) #关闭文件流 f.close() return HttpResponse(json.dumps({'status':'ok'},ensure_ascii=False),content_type='application/json')
效果:
搞定收工。