文档章节

Django文件的上传与下载

芝麻糖人
 芝麻糖人
发布于 2016/12/12 13:58
字数 453
阅读 239
收藏 1
点赞 0
评论 0

文件上传部分,直接上代码:

def uploadfile(request): #上传文件
    if request.method == 'POST':
        handle_uploaded_file(request.FILES.getlist("myfile",None))
        return HttpResponse("文件上传成功")
 
    return HttpResponse("Failed")

def handle_uploaded_file(files):
    if not os.path.exists('upload/'):
        os.mkdir('upload/')
    for file in files:
        # print file.name 
        with open('upload/' + file.name, 'wb+') as destination:
            for chunk in file.chunks():
                destination.write(chunk)

接收前端post过来的filelist,将其一一以二进制方式写入到新文件中。

至于文件下载,我选用打包成zip文件的方式,这需要用到zipfile模块,所以要

import zipfile

正式代码如下:

def downloadzipfile(request):
    rootdir = 'download'
    the_file_name = "yourzip.zip" 
    z = zipfile.ZipFile(the_file_name, 'w',zipfile.ZIP_DEFLATED)
    for parent,dirnames,filenames in os.walk(rootdir):
        for file in filenames:
            z.write(rootdir + os.sep + file)
    z.close()        
    response = StreamingHttpResponse(file_iterator(the_file_name))
    response['Content-Type'] = 'application/zip'
    response['Content-Disposition'] = 'attachment; filename=yourzip.zip'
    return response 

def file_iterator(file_name, chunk_size=512):
    with open(file_name, 'rb') as f:
        while True:
            c = f.read(chunk_size)
            if c:
                yield c
            else:
                break   

可将Django项目目录下download文件夹里的文件打包为zip文件,并下载到本地,使用StreamingHttpResponse比HttpResponse更适合于文件的传输,不会因文件过大导致占用内存过大而崩溃。

有时文件有中文名会有bug,这种时候需要将代码修改为如下模样:

from django.utils.encoding import escape_uri_path
from django.http import HttpResponse
def test(request):
    file_name = '测试.txt'
    content = ...
    response = HttpResponse(content, content_type='application/octet-stream')
    response['Content-Disposition'] = "attachment; filename*=utf-8''{}".format(escape_uri_path(file_name))
    return response

Python文件打开方式:

 r : 以只读方式打开文件,文件不存在则出错

 w:以只写方式打开文件,文件存在则清空,不存在则建立

 a:以追加只写的方式打开,不清空文件,在文件末尾加入内容  

+: 有读写双权限。

r只有读的权限,w和a只有写的权限,w清空文件,a不清空文件。(read, write,append)

© 著作权归作者所有

共有 人打赏支持
芝麻糖人
粉丝 9
博文 18
码字总数 11491
作品 0
丰台
程序员
django的视频处理

为用户提供视频服务,除了原始文件外,一般都要转为更加常规的.mp4格式,以更好的支持用户的观看。视频文件又比较大,可能会消耗服务器大量的资源(存储、带宽等),常规的模式是将这些文件存...

XuYuan ⋅ 2014/03/03 ⋅ 0

Django文件上传

使用Django做文件上传功能会遇到跨域安全问题,这里分享下如何搭建一个简单的Django文件上传应用,以及如何利用DWT SDK和Django来上传图像文件。 参考原文:Uploading Files with Django 作者...

yushulx ⋅ 2015/06/23 ⋅ 0

Django打造文件分享系统

本教程介绍如何使用Django框架快速打造文件分享系统,实现搜索功能,分享功能,用户分享文件查询。通过本课程,我们可以快速掌握Django的基础,以及一些ORM和View的高级用法。本课程适用于有...

实验楼 ⋅ 2017/12/22 ⋅ 0

[旧]使用DjangoUeditor在django中进行富文本开发

Django的安装和生成项目这里不介绍了。 DjangoUeditor下载地址:https://github.com/zhangfisher/DjangoUeditor 使用python setup.py install 安装, 推荐使用pip install DjangoUeditor安装...

子夜闻雪 ⋅ 2015/03/11 ⋅ 0

在django的admin使用ckeditor模块

首先在这个网站下载最新的django-ckeditor安装包: https://github.com/jeffh/django-ckeditor 然后解压缩,使用:python setup.py install安装,如果不是root用户,需要sudo 一。在你的解压缩...

岭南六少 ⋅ 2011/08/06 ⋅ 0

Django 开源相册组件介绍 django-photologue

一、安装与使用体验 在线体验地址:http://www.django-photologue.net/ 下载地址:https://github.com/jdriscoll/django-photologue 下载之后的安装: 解压文件包-找到setup.py所在文件路径,...

xiaoge2016 ⋅ 04/05 ⋅ 0

[转]使用Google App Engine Helper for Django

使用Google App Engine Helper for Django 原著: Matt Brown 译者: DaNmarner 原文链接: http://code.google.com/appengine/articles/appenginehelperfordjango.html 译文链接: http://d......

zting科技 ⋅ 2017/01/11 ⋅ 0

Django使用Uploadify组件实现图片上传

Uploadify组件上传文件很酷,可以实现文件进度上传,而且可以批量上传各种文件。好处还很多,具体详情登到官网看看文档了解吧。在同类组件中,Uploadify做的也很出色。打算在Django中用它,两...

岭南六少 ⋅ 2011/08/08 ⋅ 4

python实现一个外网可以访问并下载的文件系统

最近在做一个Django的项目,现在有个需求是这样的: 有一套文件存储在项目之外的路径(项目不能直接通过相对路径直接访问到) 但是我现在想访问到服务器(linux)上的这些文件(图片,PDF,W...

jiqiukun ⋅ 2016/03/08 ⋅ 1

用Django搭建个人博客网站(五. 构建后台和文章编辑器)

首先,我们先在models.py中创建一个文章的数据模型 创建文章 打开models.py文件,编写一个文章的数据模型: 文章模型 注意,不要忘了新建了数据模型后要使用makemigrations和migrate进行同步...

眼君 ⋅ 2017/12/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

说说javascript中的那些专业名词

DOM(Document Object Model) 文档对象模型 BOM(Browser Object Model) 浏览器对象模型 ECMA(European Computer Manufacturer's Association) 欧洲计算机制造商协会 W3C(World Wide Web Conso......

hang1989 ⋅ 28分钟前 ⋅ 0

Bootstrap Wizard 多步表单控件

废话 有一块需求是 有多步表单 点击下一步时触发验证一个范围内的表单,点击上一步或取消,清空表单并返回第一步,点击最后一步提交整个表单的 就找到了这个插件,本来自己写了一个原生的 fo...

无极之岚 ⋅ 44分钟前 ⋅ 0

如何利用Spring Cloud构建起自我修复型分布式系统

利用Netflix所打造的组件及各类大家熟知的工具,我们完全可以顺利应对由微服务以及分布式计算所带来的技术挑战。 在过去一年当中,微服务已经成为软件架构领域一个炙手可热的新名词,而且我们...

harries ⋅ 今天 ⋅ 0

临近实习前的感想

再过两星期就要开始新的一段实习了,想想去年的这个时候也在实习,心中不免思绪万千,也一直想写对2017做个总结,但一直迟迟没有下笔。 2017年的春节,我就开始准备开学后找份实习。那时候就...

无精疯 ⋅ 今天 ⋅ 0

Spring AOP(面向切面编程)

Spring AOP概念: Spring AOP 可以劫持一个执行的方法,在方法执行之前或之后添加额外的功能。通常情况下,AOP把项目中需要在多处用到的功能,比如日志、安全和事物等集中到一个类中处理,而...

霍淇滨 ⋅ 今天 ⋅ 0

人工智能、机器学习、数据挖掘以及数据分析有什么联系?

人工智能是目前炙手可热的一个领域,所有的互联网公司以及各路大迦们纷纷表态人工智能将是下一个时代的革命性技术,可与互联网、移动互联网时代的变更相媲美;AlphaGo在围棋领域战胜人类最顶...

董黎明 ⋅ 今天 ⋅ 0

使用 vue-cli 搭建项目

vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli 一、 安装 node.js 首先需要安装node环境,可以直接到中...

初学者的优化 ⋅ 今天 ⋅ 0

设计模式 之 享元模式

设计模式 之 享元模式 定义 使用共享技术来有效地支持大量细粒度对象的复用 关键点:防止类多次创建,造成内存溢出; 使用享元模式来将内部状态与外部状态进行分离,在循环创建对象的环境下,...

GMarshal ⋅ 今天 ⋅ 0

SpringBoot集成Druid的最简单的小示例

参考网页 https://blog.csdn.net/king_is_everyone/article/details/53098350 建立maven工程 Pom文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM......

karma123 ⋅ 今天 ⋅ 0

Java虚拟机基本结构的简单记忆

Java堆:一般是放置实例化的对象的地方,堆分新生代和老年代空间,不断未被回收的对象越老,被放入老年代空间。分配最大堆空间:-Xmx 分配初始堆空间:-Xms,分配新生代空间:-Xmn,新生代的大小一...

算法之名 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部