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 id="uploadForm" enctype="multipart/form-data"> //文件上传的form
{% csrf_token %}
<input id="file" type="file" name="file" > //上传文件
<input type="radio" name="ostype" value="Windows" />Windows
<input type="radio" name="ostype" value="Linux" />Linux
<input type="radio" name="ostype" value="Network" />Network
<input type="radio" name="ostype" value="DB" />DB
<button id="upload" type="button" style="margin:20px">上传</button>
</form>

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
}); });

django文件上传下载的更多相关文章

  1. Django文件上传下载与富文本编辑框

    django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...

  2. django 12天(跨域,文件上传,下载,cookie,session)

    django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...

  3. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  4. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  5. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

  6. 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)

    1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...

  7. 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)

    艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...

  8. ssh框架文件上传下载

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. SpringMVC——返回JSON数据&&文件上传下载

    --------------------------------------------返回JSON数据------------------------------------------------ ...

随机推荐

  1. ActionScript语言函数重载

    更新:你见过JavaScript支持重载吗,规范就是这么定义的.如果不是研究Java和Flex对象的Serialization,我也不会注意它. 距离写这篇文章已有8年了,时光匆匆啊,今天整理资料时看 ...

  2. linux 常用目录

    /bin   执行文件 ls, mv, rm, mkdir, rmdir, gzip, tar, telnet /boot linux核心文件内核 vmlinuz-xxx(Linux 的 Kernel ...

  3. css3动画属性(transitions:property duration timing transition-delay)

    transitions:property duration timing-function; transitionst他有三个参数:1) property:属性设置,例如background,colo ...

  4. Android性能优化方法(四)

    在一个应用程序中,一般都会存在多个Activity,每个Activity对应着一个UI布局文件.一般来说,为了保持不同窗口之间的风格统一,在这些UI布局文件中,几乎肯定会用到很多相同的布局.如果我们在 ...

  5. ASP.NET简单验证码

    今天写了一个特别简单的验证码实现.现将代码贴出. protected void Page_Load(object sender, EventArgs e) { CreateCheckCodeImage ...

  6. mongoDB研究笔记:journaling保证意外故障下的数据完整性

    mongoDB的Journaling日志功能与常见的log日志是不一样的,mongoDB也有log日志,它只是简单记录了数据库在服务器上的启动信息.慢查询记录.数据库异常信息.客户端与数据库服务器连接 ...

  7. 配置ubuntu 14.04.3 LTS odoo 9.0开发环境

    使用VMware Fusion 8.0.1创建ubuntu 64bit虚拟机:使用ubuntu-14.04.3-desktop-amd64.iso镜像缺省安装ubuntu,用户名odoo,密码1234 ...

  8. 虚拟机Ubuntu14/15启用root用户登录

    1. 为root用户设置密码 sudo passwd root 需要先输入一次当前用户的登陆密码,然后输入两次root用户的密码(自己设置). 2. 切换至root用户 sudo -s 3. 编辑登陆 ...

  9. 体验应用程序在Mac/iPhone/iPad之间的Handoff

    对于苹果新推出的Handoff功能,之前只体验了接电话的Handoff.一个电话打过来,iPhone/iPad/Mac同时响起,这时如果手上拿着东西在吃,就可以直接在Mac上接电话. 除此之外,还可以 ...

  10. ubuntu 12.04 安装 redis

    原文地址:http://ijonas.com/software-development/nosql/412/ 1 Installing Redis 2.6.x on Ubuntu 12.04 and ...