文档章节

django提供二进制流数据文件的下载

o
 osc_g8254g7s
发布于 2019/08/19 17:42
字数 483
阅读 55
收藏 0

精选30+云产品,助力企业轻松上云!>>>

基于djnago框架的二进制流数据传输(提供较大文件的下载)

  (1)数据源:

    高质量图片、视频、音频、文件、数据库数据等。如果是数据库文件,需要先读取相应的数据,然后写入表格在传输到前端以供下载!

  (2)数据读取:

    利用yield函数生成器进行rb模式文件读取操作

  (3)数据传输:

    通过StreamingHttpResponse()二进制流格式进行相应(from django.http.response import StreamingHttpResponse或者使用文件响应FileResponse)

  如果除数中使用的有中文,需要通过quote()方法来确保中文不乱码(from urllib.parse import quote)

文件的上传见<Django之AJAX文件上传>篇,python操作excel表格见<python操作excel----openpyxl模块>或<xpython操作excel之xlwt与xlrd>

接口模式提供唯一码的下载案例  

 1 import os
 2 import openpyxl
 3 from django.views import View
 4 from django.http.response import StreamingHttpResponse
 5 from urllib.parse import quote
 6 
 7 
 8 class FileDownload(View):
 9     def get(self, request, pk=None):
10         #查询书库获相应字段数据
11         queryset = models.Surveys.objects.filter(pk=pk).only('unique_code')#only只显示指定的字段
12 
13         #创建excel写入数据
14         book=openpyxl.Workbook()
15         table=book.create_sheet("唯一码")
16         table.cell(1,1,"唯一码")#openpyxl模块创建的表索引都是从1开始
17         for index, code in enumerate(queryset.iterator(), 2):#查询集合调用iterator方法成迭代器
18             table.cell(index, 1, code.unique_code)
19         book.save("唯一码.xls")
20 
21 
22         #利用生成器进行文件读取
23         def iter_file(path):
24             size=1024
25             with open(path, "rb")as f:
26                 for data in iter(lambda :f.read(size), b''):
27                     yield data
28 
29         #以二进制形式进行数据流传输
30         response=StreamingHttpResponse(iter_file(os.path.join("唯一码.xls")))#以二进制形式响应数据流
31         response['Content-Type'] = 'application/octet-stream'#浏览器不识别的也会自动下载
32         response['Content-Disposition'] = 'attachment; {}'.format(
33             "filename*=utf-8''{}".format(quote("唯一码.xls"))#quote确保中文格式不乱码
34         )
35         return response

   

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
WebSSH画龙点睛之lrzsz上传下载文件

本篇文章没有太多的源码,主要讲一下实现思路和技术原理 当使用Xshell或者SecureCRT终端工具时,我的所有文件传输工作都是通过来完成的,主要是因为其简单方便,不需要额外打开sftp之类的工具...

osc_agn9pfb0
04/16
27
0
Django的视图流式响应机制

Django的视图流式响应机制 Django的响应类型:一次性响应和流式响应。 一次性响应,顾名思义,将响应内容一次性反馈给用户。HttpResponse类及子类和JsonResponse类属于一次性响应。 流式响应...

osc_iiheq33y
2018/01/16
2
0
django实现文件下载

基于Django建立的网站,如果提供文件下载功能,最简单的方式莫过于将静态文件交给Nginx等处理,但有些时候,由于网站本身逻辑,需要通过Django提供下载功能,如页面数据导出功能(下载动态生...

董启凡
2016/01/31
160
0
Django 实现下载文件功能

基于Django建立的网站,如果提供文件下载功能,最简单的方式莫过于将静态文件交给Nginx等处理,但有些时候,由于网站本身逻辑,需要通过Django提供下载功能,如页面数据导出功能(下载动态生...

丰_申
2016/05/08
3
0
【Python全栈-后端开发】嵩天老师-Django

嵩天老师-Python云端系统开发入门教程(Django) 视频地址:https://www.bilibili.com/video/av19801429 课前知识储备: 一、课程介绍: 分久必合、合久必分,移动互联网应用进入了一个云计算时...

osc_8ieji7o1
2019/03/10
16
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么从HBase的0.96版本开始,舍弃了-ROOT-文件?

HBase结构的读写流程 (1). HBase0.96版本之前: (2). HBase0.96开始: a. 当客户端获取到.meta文件的位置之后,会缓存.meta.文件的位置 b. 客户端还会缓存HRegion的位置 -ROOT-存在的意义: ...

其乐m
26分钟前
18
0
volatile关键字对 - What is the volatile keyword useful for

问题: At work today, I came across the volatile keyword in Java. 今天的工作中,我遇到了Java中的volatile关键字。 Not being very familiar with it, I found this explanation: 不太熟......

技术盛宴
31分钟前
25
0
golang 封装 mysql 和 redis 连接

Mysql封装 package dbimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jmoiron/sqlx")var DB *sqlx.DBfunc init(){database, err := sqlx.Op......

开源中国最牛的人
32分钟前
16
0
pdfbox 读取文件报错 java.io.IOException: Page tree root must be a dictionary

pdfbox java.io.IOException: Page tree root must be a dictionary 示例代码 public static void main(String[] args) { try (InputStream sampleInputs = new ClassPathResource("s......

lemos
40分钟前
28
0
整理 Linux下列出目录内容的命令

在 Linux 中,有非常多的命令可以让我们用来执行各种各样的任务。当我们想要像使用文件浏览器一样列出一个目录下的内容时,大家第一时间想到的是 ls 命令。但只有 ls 命令能实现这个目的吗?...

良许Linux
41分钟前
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部