django文件上传下载
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文件上传下载的更多相关文章
- Django文件上传下载与富文本编辑框
django文件上传下载 上传 配置settings.py # 设定文件的访问路径,如:访问http://127.0.0.1:8000/media/就可以获取文件 MEDIA_URL = '/medi ...
- django 12天(跨域,文件上传,下载,cookie,session)
django 12天(跨域,文件上传,下载) 跨域 什么是跨域 1.协议不同 2.端口不同 3.主机不同 如何解决跨域 1.安装django-cors-headers模块 2.在settings.py ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
- 艺萌文件上传下载及自动更新系统(基于networkComms开源TCP通信框架)
1.艺萌文件上传下载及自动更新系统,基于Winform技术,采用CS架构,开发工具为vs2010,.net2.0版本(可以很容易升级为3.5和4.0版本)开发语言c#. 本系统主要帮助客户学习基于TC ...
- 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- ssh框架文件上传下载
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- SpringMVC——返回JSON数据&&文件上传下载
--------------------------------------------返回JSON数据------------------------------------------------ ...
随机推荐
- tp 中关于大小写的问题
ThinkPHP3.2.3升级的若干问题和注意事项(持续更新) 现把ThinkPHP3.2.2在升级到3.2.3的过程中需要注意和可能的问题整理如下: (无论如何,在升级之前请确认备份) 1.首先3. ...
- 集合与Iterator
Iterator模式 是遍历集合类的标准访问方法.为的是不暴露类的内部结构,将访问逻辑从集合类中抽象出来. 想循环遍历数组,链表等结构数据,客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦 ...
- Ubuntu10.0.4安装NDK
android版本遇到.so文件crash,需要使用ndk来定位报错代码. 从这里下载ndk安装文件: http://www.androiddevtools.cn/ 运行 ./android-ndk- ...
- Node.js-提供了四种形式的定时器
Node.js提供了四种形式的定时器 global.setTimeout(); //一次性定时器 global.setInterval(); //周期性定时器 global.nextTick(); / ...
- FME之于规划CAD数据质量检测
最近琢磨规划CAD数据转换入库GIS方面的技术问题,看过一些前辈的文章/文献,对于使用FME WorkBench方面,有了一些了解,往往直接转换数据丢失比较严重,而且GIS对图形属性和空间拓扑比较严格 ...
- 如何优化cocos2d程序的内存使用和程序大小:第一部分
译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...
- 第五天:内置对象(7.Javascript内置对象)
1)中所术是内置对象,2)中为自定义对象 代码说明如下 2.1.1 定义并创建对象实例方式1,代码如下: <!DOCTYPE html><html lang="en&quo ...
- Salesforce 生成测试可用 Id
在写 Test Class 的时候,有时候需要一批有 Id 的数据或者把 Id 作为参数等情况,在数据关系比较复杂的情况下去造真实数据有些麻烦,于是找到这样一个可以生成 Id 的方法可以用来辅助测试! ...
- 真实世界:使用WCF扩展记录服务调用时间
WCF 可扩展性 WCF 提供了许多扩展点供开发人员自定义运行时行为. WCF 在 Channel Layer 之上还提供了一个高级运行时,主要是针对应用程序开发人员.在 WCF 文档中,它常被称为服 ...
- SQL SERVER 数据库查询表和字段信息语句
--数据库中所有表的信息(很强悍的) SELECT 表名 = CASE WHEN A.COLORDER=1 THEN D.NAME EL ...