基于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. 动静结合?Ruby 和 Java 的基础语法比较(入门篇)

    前言 这篇文章示例代码比较多, Java 程序员可以看到一些 Ruby 相关语法和使用,Ruby 程序员可以看看 Java 的基本语法和使用方法,本文比较长,将近万字左右,预计需要十几分钟,如果有耐心 ...

  2. [Windows API] Listing the Files in a Directory,可用来数文件夹下有多少个子文件(夹)

    转载 #include <windows.h> #include <tchar.h> #include <stdio.h> #include <strsafe ...

  3. vue2.x学习笔记(二十八)

    接着前面的内容:https://www.cnblogs.com/yanggb/p/12682573.html. 生产环境部署 以下大多数内容在你使用vue cli的时候都是默认开启的,仅跟你自定义的构 ...

  4. 翻译 - Kafka Streams 介绍(一)

    2019独角兽企业重金招聘Python工程师标准>>> 资料 [原文地址](http://kafka.apache.org/11/documentation/streams/) 正文 ...

  5. vue2.0学习笔记(第八讲)(vue-cli的使用)

    vue-cli相当于脚手架,可以帮助我们自动生成模板工程.其内部集成了很多的项目模板,如simple.webpack.webpack-simple等.其中webpack这个项目模板适用于大型项目的开发 ...

  6. How to get binary string from ArrayBuffer?

    https://stackoverflow.com/questions/16363419/how-to-get-binary-string-from-arraybuffer https://stack ...

  7. File Operations

    在刷题测试程序时,为了避免每次都手工输入,我们可以把输入数据保存在文件中:为了避免输出太长,我们将输出也写入文件中,方便与标准答案文件进行比较. 文件使用一般有两种方法:输入输出重定向.fopen. ...

  8. 数学--数论--HDU 2136(素数筛选法)

    Everybody knows any number can be combined by the prime number. Now, your task is telling me what po ...

  9. Jenkins 构建 Jmeter 项目

    1.启动 Jenkins(windows 版本) 2.新建自由风格的项目 定时任务 构建操作 安装 HTML Publisher 插件 构建后操作 最后保存构建,查看报告

  10. thinkphp历史漏洞

    https://github.com/pochubs/pochubs/blob/master/ThinkPHP.md tp 历史漏洞 路由控制類RCE/think/App.php if (!preg_ ...