Django+layui 实现多文件上传,文件下载

您所在的位置:网站首页 layui文件上传下载 Django+layui 实现多文件上传,文件下载

Django+layui 实现多文件上传,文件下载

2022-05-03 21:09| 来源: 网络整理| 查看: 265

Django+layui 实现多文件上传、文件下载

django教程:http://www.liujiangblog.com/course/django/84

                      https://www.runoob.com/django/django-tutorial.html

layui官网:       https://www.layui.com/doc/

layui样式调整:http://www.hangge.com/blog/cache/detail_2078.html

 

 

多文件上传

效果:

主要代码(路由配置的就不展现了):前端

所属类型 教育资源 专业资料 IT资料 娱乐生活 经济管理 办公文书 选择多文件 文件名 大小 状态 操作 开始上传 var form; var files; layui.use('upload', function () { var $ = layui.jquery , upload = layui.upload; //多文件列表示例 var demoListView = $('#demoList') , uploadListIns = upload.render({ elem: '#testList' , method: 'POST' , accept: 'file' , multiple: true , auto: false , choose: function (obj) { files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 //读取本地文件 obj.preview(function (index, file, result) { var tr = $(['' , '' + file.name + '' , '' + (file.size / 1014).toFixed(1) + 'kb' , '等待上传' , '' , '重传' , '删除' , '' , ''].join('')); //单个重传 tr.find('.demo-reload').on('click', function () { obj.upload(index, file); }); //删除 tr.find('.demo-delete').on('click', function () { delete files[index]; //删除对应的文件 tr.remove(); uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 }); demoListView.append(tr); getFileNames();//得到文件名 }); } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('上传成功'); tds.eq(3).html(''); //清空操作 return delete this.files[index]; //删除文件队列已经上传成功的文件 } this.error(index, upload); } , error: function (index, upload) { var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('上传失败'); tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); }); function getFileNames() { var count = 0; form = new FormData(); // form.append("file", files[0]); // 将文件列表加入FormData()中 for (let i in files) { form.append("file" + count, files[i]); console.log("--------" + i + "---->" + files[i]); count = count + 1; } // 获得上传的文件总数 form.append("files_count", count); // 获得上传的文件类型 form.append("resource_type", $("select[name='resource_type']").val()); } $(document).ready(function () { $("#test").click(function () { alert($("select[name='resource_type']").val()) }); $("#testListAction").click(function () { $.ajax({ url: "upload_resource_process", type: "POST", async: true,// 异步上传 data: form, // 告诉jQuery不要去处理发送的数据 processData: false, // 告诉jQuery不要去设置Content-Type请求头 contentType: false, success: function (data) { var demoListView = $('#demoList'); demoListView.empty(); // 每次上传成功后将文件列表清空 for (let i in files) { delete files[i]; } layer.msg('上传成功', { icon: 6 }); }, error: function () { alert("error"); } }) }); });

后端:

def upload_resource_process(request): user = request.session.get('user', None) # 用户如果没有登录 跳转到登录界面 if not user: return redirect('/user/login') notice_five = models.Notice.objects.filter(Q(user=user) & Q(notice_status='未读')).count() files_count = request.POST['files_count'] resource_type = request.POST['resource_type'] print('file_count---------->%s' % files_count) now = datetime.datetime.now() # 得到当前时间 for i in range(int(files_count)): resource_file = request.FILES['file' + str(i)] # 保存至数据库中 resource = Resource( user=user, resource_type=resource_type, resource_name=resource_file, resource_file=resource_file, resource_status='待审核', submit_time=now, ) resource.save() print(resource_file) print('*' * 50) print("uploading--------------------------------------------") return render(request, "resource_manage/upload_resource.html", {"notices": notice_five, "user": user})

文件下载

效果:

主要代码:前端

文件名 文件类型 状态 上传时间 操作 {% for resource in other_resource %}


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3