博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django文件上传下载
阅读量:5927 次
发布时间:2019-06-19

本文共 3309 字,大约阅读时间需要 11 分钟。

views:

def mgmt_files(request): #列出树形目录,上传文件页面    if request.method == 'POST':        path_root = "D:\\py\\ITFiles" #上传文件的主目录        myFile =request.FILES.get("file", None)    # 获取上传的文件,如果没有文件,则默认为None          if not myFile:              dstatus = "请选择需要上传的文件!"        else:            path_ostype = os.path.join(path_root,request.POST.get("ostype"))            path_dst_file = os.path.join(path_ostype,myFile.name)            # print path_dst_file            if os.path.isfile(path_dst_file):                dstatus = "%s 已存在!"%(myFile.name)            else:                destination = open(path_dst_file,'wb+')    # 打开特定的文件进行二进制的写操作                  for chunk in myFile.chunks():      # 分块写入文件                      destination.write(chunk)                  destination.close()                  dstatus = "%s 上传成功!"%(myFile.name)        return HttpResponse(str(dstatus))    return render(request,'sinfors/mgmt_files.html')def mgmt_file_download(request,*args,**kwargs): #提供文件下载页面    #定义文件分块下载函数     def file_iterator(file_name, chunk_size=512):        with open(file_name,'rb') as f: #如果不加‘rb’以二进制方式打开,文件流中遇到特殊字符会终止下载,下载下来的文件不完整            while True:                c = f.read(chunk_size)                if c:                    yield c                else:                    break    path_root = "D:\\py\\ITFiles"    if kwargs['fpath'] is not None and kwargs['fname'] is not None:        file_fpath = os.path.join(path_root,kwargs['fpath']) #kwargs['fapth']是文件的上一级目录名称        file_dstpath = os.path.join(file_fpath,kwargs['fname']) #kwargs['fname']是文件名称        response = StreamingHttpResponse(file_iterator(file_dstpath))        response['Content-Type'] = 'application/octet-stream'        response['Content-Disposition'] = 'attachment;filename="{0}"'.format(kwargs['fname']) #此处kwargs['fname']是要下载的文件的文件名称        return response

  StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,对于文件下载功能,使用StreamingHttpResponse对象更合理。通过文件流传输到浏览器,但文件流通常会以乱码形式显示到浏览器中,而非下载到硬盘上,因此,还要在做点优化,让文件流写入硬盘,给StreamingHttpResponse对象的Content-Type和Content-Disposition字段赋下面的值即可,如:

response['Content-Type'] = 'application/octet-stream'

response['Content-Disposition'] = 'attachment;filename="filename.txt"'

 

 

html页面:

//文件上传的form {% csrf_token %}
//上传文件
Windows
Linux
Network
DB

js页面:

$("#upload").click(function(){    // alert(new FormData($('#uploadForm')[0]));    var ostype = $('input:radio:checked').val()    if (ostype == undefined){      alert('请选择上传的文件类型');    }     //获取单选按钮的值    $.ajax({            type: 'POST',            // data:$('#uploadForm').serialize(),            data:new FormData($('#uploadForm')[0]),            processData : false,               contentType : false, //必须false才会自动加上正确的Content-Type              // cache: false,            success:function(response,stutas,xhr){              // parent.location.reload();              //window.location.reload();              // alert(stutas);              alert(response);            },            // error:function(xhr,errorText,errorStatus){
// alert(xhr.status+' error: '+xhr.statusText); // } timeout:6000 }); });

 

转载于:https://www.cnblogs.com/dreamer-fish/p/5948428.html

你可能感兴趣的文章
最长公共子串,动态规划
查看>>
调整应用程序服务环境,何时执行任务
查看>>
我的友情链接
查看>>
IP与MAC地址绑定
查看>>
python面对对象(一)
查看>>
格式化日期字符串来了 转
查看>>
SQLSERVER2008 数据库可疑的解决方法
查看>>
biji
查看>>
Docker Compose Networking
查看>>
golang web 自定义Handler时候静态资源问题
查看>>
几个经典软件中出现的字符串Hash函数
查看>>
How to force “git pull” to overwrite local files?
查看>>
configure向cmake过渡指南
查看>>
linux下解压命令大全
查看>>
我的友情链接
查看>>
java泛型之使用通配符参数
查看>>
Linux 多网卡多路由实现策略路由
查看>>
03-Influxdb的备份与恢复
查看>>
Python 函数返回两个值的办法
查看>>
排查spring事务不生效
查看>>