文档章节

Django文件的上传与下载

芝麻糖人
 芝麻糖人
发布于 2016/12/12 13:58
字数 453
阅读 385
收藏 1

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

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)

© 著作权归作者所有

共有 人打赏支持
芝麻糖人
粉丝 10
博文 20
码字总数 11932
作品 0
丰台
程序员
私信 提问
Django打造文件分享系统

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

实验楼
2017/12/22
0
0
[旧]使用DjangoUeditor在django中进行富文本开发

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

子夜闻雪
2015/03/11
0
0
在django的admin使用ckeditor模块

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

岭南六少
2011/08/06
0
0
Django 开源相册组件介绍 django-photologue

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

xiaoge2016
04/05
0
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
0

没有更多内容

加载失败,请刷新页面

加载更多

ConcurrentHashMap源码解析

初始化 先看看ConcurrentHashMap中几个重要的属性: // 初始化容量大小static final int DEFAULT_INITIAL_CAPACITY = 16;//默认负载因子static final float DEFAULT_LOAD_FACTOR = 0.75f...

grace_233
7分钟前
0
0
java对象的浅拷贝和深拷贝

浅拷贝 java的数据类型有基本数据类型(如:int、long等)和引用数据类型。例如:对象1中有属性a(基本数据类型)和属性b(引用数据类型),在进行浅拷贝到对象2时,属性a复制属性的值给对象...

yangyangyyyy
7分钟前
0
0
SQLServer AlwaysOn在阿里云的前世今生

缘起 早在2015年的时候,随着阿里云业务突飞猛进的发展,SQLServer业务也积累了大批忠实客户,其中一些体量较大的客户在类似大促的业务高峰时RDS的单机规格(规格是按照 内存CPUIOPS 一定比例...

阿里云云栖社区
9分钟前
0
0
ubuntu16.04 LNMP搭建 php7.1

sudo apt-get update sudo apt-get install mysql-server mysql-client sudo apt-add-repository ppa:ondrej/php sudo apt-get update sudo apt-get install php7.1 php7.1-fpm php7.1-cgi p......

一千零一夜个为什么
15分钟前
0
0
阿里云高级技术专家带你全面了解云主机性能评测

钱超,花名西邪,阿里云高级技术专家,超12年老阿里,是云主机性能领域的知名专家。 在目前的云计算测评领域,很多性能测评存在营销的包装,容易引起误导:比如用瞬时性能引导读者得出结论,...

阿里云官方博客
22分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部