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. db2 怎么计算两个时间相差多少个月。如2015-10-10 和2014-1-12

    SELECT timestampdiff (256, char(timestamp('2013-12-30 20:30:30') - timestamp('2001-09-26 15:24:23')) ...

  2. CityEngine中动态水的实现

    地址:http://pan.baidu.com/share/link?shareid=3871210059&uk=3492170216 密码:am5b 在今年Esri全球用户大会和Esri中国 ...

  3. Java 线程池的原理与实现

    最近在学习线程池.内存控制等关于提高程序运行性能方面的编程技术,在网上看到有一哥们写得不错,故和大家一起分享. 建议:在阅读本文前,先理一理同步的知识,特别是syncronized同步关键字的用法.关 ...

  4. C++中类的前向声明的用法

    原创文章,未经博主允许禁止转载. C++的类可以进行前向声明.但是,仅仅进行前向声明而没有定义的类是不完整的,这样的类,只能用于定义指针.引用.以及用于函数形参的指针和引用.而不能定义对象(因为此时编 ...

  5. CCF 201612-2 火车购票 (暴力)

    问题描述 请实现一个铁路购票系统的简单座位分配算法,来处理一节车厢的座位分配. 假设一节车厢有20排.每一排5个座位.为方便起见,我们用1到100来给所有的座位编号,第一排是1到5号,第二排是6到10 ...

  6. 网页中插入swf动画(embed)

    网页中插入swf动画(embed:[ɪm'bed]) 例题: <embed src="swf.sef" width="200" height=" ...

  7. C语言和Lua的交互

    //test.c #include <stdio.h> #include "lua.h" #include "lualib.h" #include ...

  8. Linux内核分析之跟踪分析Linux内核的启动过程

    一.实验过程 使用实验楼虚拟机打开shell cd LinuxKernel/ qemu -kernel linux-/arch/x86/boot/bzImage -initrd rootfs.img ...

  9. 安装了linux系统的设备上不了网怎么办

    玩了一阵子的树莓派,曾经计划将其作成一台小小无线路由,但是时间和精力关系始终未成功做成. 同时也有在进行一些arm开发板的学习,突然一天发现arm板直接插上网线不能是不能上网的,又想起之前玩树莓派的时 ...

  10. CentOS下 pycharm开发环境搭建之无穷无尽的问题

    在上一篇的环境搭建中,表面上以为已经升级好python,安装好pycharm,并且可以用上了django框架,谁知道,谁知道,又是一断被虐的经历,我都要快恼羞成怒了. 在些记录一下我的经历. 1.首先 ...