基于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>

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

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

   

django提供二进制流数据文件的下载的更多相关文章

  1. Jmeter入门13 jmeter发送application/octet-stream二进制流数据

    http接口请求header里面 content-type: application/octet-stream  (二进制流数据),如何用jmeter发送请求? 1 添加http请求头 2 http请 ...

  2. 转:WCF传送二进制流数据基本实现步骤详解

    来自:http://developer.51cto.com/art/201002/185444.htm WCF传送二进制流数据基本实现步骤详解 2010-02-26 16:10 佚名 CSDN   W ...

  3. ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践

    写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返 ...

  4. postgresql存储二进制大数据文件

    如果想把整个文件或图片存储在数据表的一个字段内,该字段可以选择二进制类型,然后将文件按二进制存储起来,文本文件也可以存在text字段内. 示例如下: 二进制类型bytea的操作(在最大值内,有内存限制 ...

  5. std::ofstream由二进制流写文件的问题

    从MPQ包中读取二进制流出来然后文件写到硬盘. DWORD size = SFileGetSize(hFile); char* buffer = new char[size]; std::ofstre ...

  6. php canvas 前端JS压缩,获取图片二进制流数据并上传

    <?php if(isset($_GET['upload']) && $_GET['upload'] == 'img'){ //二进制数据流 $data = file_get_c ...

  7. 前端Blob对二进制流数据的处理方式

    var xhr = new XMLHttpRequest(); xhr.open("post", "/login/getCaptcher?t=" + Math. ...

  8. net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件

    原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  9. 第六章 MVC之 FileResult和JS请求二进制流文件

    一.FileResult 1.简介 表示一个用于将二进制文件内容发送到响应的基类.它有三个子类: FileContentResultFilePathResultFileStreamResult 推荐阅 ...

随机推荐

  1. thinkPHP--关于域名指向的问题

    一般项目的域名指向都是可以直接配置的,在默认的情况下.一般都是指向index.php文件.我就直接上图吧,这里是用我的公司项目名称www.xcj.com为域名. 一般的进入项目,调用默认的控制器: h ...

  2. git在push时候出现timeout的解决方法

    1.先对照一下公钥是否正确:linux下生成的.ssh在~/.ssh,命令行直接cd ~/.ssh即可:2.本次出现的问题如下: 出现了连接不上的情况,传输协议用的是ssh,此时需要进行如下操作: 进 ...

  3. ARP/RARP报文格式

    arp协议 地址解析协议ARP(Address Resolution Protocol)是用来将IP地址解析为MAC地址的协议. arp格式: 一个字节等于8位 硬件类型:指明发送方想知道的硬件接口类 ...

  4. axios的使用小技巧:如何绕过字符串拼接,直接传递对象

     Vue.js官方推荐使用axios作为发送http请求的工具,在使用axios中,有些小技巧是不容易发现的.当我们不知道这些技巧时,我们可能会使用其他"奇技淫巧",比如,我们很容 ...

  5. js中的this指针的用法

    首先看下面代码: function funcA() { this.name = "hello"; console.log(this.name); this.show = funct ...

  6. python自动化测试开发利器ulipad最佳实践(可写python测试代码也可编写selenium、Appium等)...

    介绍 UliPad是一个国人开发的python轻量级编辑器,导向和灵活的编程器.它如类浏览器,代码自动完成许多功能,如:HTML查看器,目录浏览器,向导等. 下载与安装 下载地址:https://py ...

  7. postman(环境设置)

    1.点击小齿轮进入到环境变量添加页面,点击add添加环境变量 2.新增环境输入变量名称和变量值 3.添加成功 4.接口中设置变量,切换环境进行传参 5.调用环境变量断言 调用环境变量中的phone变量 ...

  8. 一个简单的wed服务器SHTTPD(5)————服务器SHTTPD请求方法解析

    //start from the very beginning,and to create greatness //@author: Chuangwei Lin //@E-mail:979951191 ...

  9. shell之路 Linux核心命令【第一篇】管道符与重定向

    输出重定向 命令输出重定向的语法为: command > file 或 command >> file 这样,输出到显示器的内容就可以被重定向到文件.果不希望文件内容被覆盖,可以使用 ...

  10. 记一次真实的线上事故:一个update引发的惨案!

    目录 前言 项目背景介绍 要命的update 结语 前言   从事互联网开发这几年,参与了许多项目的架构分析,数据库设计,改过的bug不计其数,写过的sql数以万计,从未出现重大纰漏,但常在河边走,哪 ...