文档章节

Django文件的上传与下载

芝麻糖人
 芝麻糖人
发布于 2016/12/12 13:58
字数 453
阅读 299
收藏 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)

© 著作权归作者所有

共有 人打赏支持
芝麻糖人
粉丝 9
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

day60-20180818-流利阅读笔记-待学习

钉钉:工作的归工作,生活的…也归工作? 毛西 2018-08-18 1.今日导读 你用过“钉钉”么?被公司要求使用钉钉的感受是如何的呢?这款阿里巴巴旗下的移动办公社交平台在弯道超车微信、为许多企...

aibinxiao
46分钟前
6
0
Kubernetes的HTTPS和证书问题,汇总

通过Kubernetes建立服务网站,需要干的事情和HTTPS和证书问题,汇总如下: 建立Nginx服务器 搞服务器第一步,Ubuntu 18.04设置静态IP 安装Nginx服务。 Kubernetes的deployment使用 创建服务,...

openthings
今天
2
0
php 使用redis锁限制并发访问类

1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功。 例如换领优惠券,如果用户同一时间并发提交换领...

豆花饭烧土豆
今天
0
0
Linux环境搭建 | 手把手教你配置Linux虚拟机

在上一节 「手把你教你安装Linux虚拟机」 里,我们已经安装好了Linux虚拟机,在这一节里,我们将配置安装好的Linux虚拟机,使其达到可以开发的程度。 Ubuntu刚安装完毕之后,还无法进行开发,...

良许Linux
今天
0
0
(三)Nginx配置·续

概述 前文写了关于Nginx环境配置,但是还没有完,接下来将会继续讲三个相关的配置 主要是以下三个 1.Nginx访问日志 2.Nginx日志切割 3.静态文件不记录日志和过期时间 Nginx访问日志 1.先看看...

杉下
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部