django提供二进制流数据文件的下载
基于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提供二进制流数据文件的下载的更多相关文章
- Jmeter入门13 jmeter发送application/octet-stream二进制流数据
http接口请求header里面 content-type: application/octet-stream (二进制流数据),如何用jmeter发送请求? 1 添加http请求头 2 http请 ...
- 转:WCF传送二进制流数据基本实现步骤详解
来自:http://developer.51cto.com/art/201002/185444.htm WCF传送二进制流数据基本实现步骤详解 2010-02-26 16:10 佚名 CSDN W ...
- ajax 请求二进制流 图片 文件 XMLHttpRequest 请求并处理二进制流数据 之最佳实践
写在前面 :从提出需求到完美的解决问题,实现过程是曲折的. 需求:在前(web client)后(Restful Service)端完全解耦的模式框架下,webclient需要请求 Service 返 ...
- postgresql存储二进制大数据文件
如果想把整个文件或图片存储在数据表的一个字段内,该字段可以选择二进制类型,然后将文件按二进制存储起来,文本文件也可以存在text字段内. 示例如下: 二进制类型bytea的操作(在最大值内,有内存限制 ...
- std::ofstream由二进制流写文件的问题
从MPQ包中读取二进制流出来然后文件写到硬盘. DWORD size = SFileGetSize(hFile); char* buffer = new char[size]; std::ofstre ...
- php canvas 前端JS压缩,获取图片二进制流数据并上传
<?php if(isset($_GET['upload']) && $_GET['upload'] == 'img'){ //二进制数据流 $data = file_get_c ...
- 前端Blob对二进制流数据的处理方式
var xhr = new XMLHttpRequest(); xhr.open("post", "/login/getCaptcher?t=" + Math. ...
- net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件
原文发布时间为:2008-08-10 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...
- 第六章 MVC之 FileResult和JS请求二进制流文件
一.FileResult 1.简介 表示一个用于将二进制文件内容发送到响应的基类.它有三个子类: FileContentResultFilePathResultFileStreamResult 推荐阅 ...
随机推荐
- 关于flex弹性布局
http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
- (第一篇)linux简介与发展历史以及软件的安装
1.Linux操作系统基本结构介绍: 操作系统: 英文名称Operating System,简称OS,是计算机系统中必不可少的基础系统软件,它是应用程序运行以及用户操作必备的基础环境支撑,是计算机系统 ...
- icmp的抓包分析
ICMP(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议簇的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络 ...
- C++统一初始化语法(列表初始化)
引言 要是世上不曾存在C++14和C++17该有多好!constexpr是好东西,但是让编译器开发者痛不欲生:新标准库的确好用,但改语法细节未必是明智之举,尤其是3年一次的频繁改动.C++带了太多历史 ...
- Binary Index Tree
0 引言 Leetcode307 这道题给一个可变数组,求从\(i\)到\(j\)的元素之和. 一个naive的做法是,每次查询都从\(i\)累加到\(j\): class NumArray { pu ...
- INTERVIEW #3
菊厂的面试本来没打算记录,因为当时投的是非技术岗(技术支持).为了全面,就寥做记录. 菊厂的面试因为有口头保密协议,所以不能透露具体题目. 0 群面 简历通过筛选后,会有短信通知去面试. 非技术岗第一 ...
- P2024 食物链(种类并查集)
P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动 ...
- python(If 判断)
一.if判断 如果 条件满足,才能做某件事情, 如果 条件不满足,就做另外一件事情,或者什么也不做 注意: 代码的缩进为一个 tab 键,或者 4 个空格 在 Python 开发中,Tab 和空格不要 ...
- Sunday算法:字符串匹配算法进阶
背景 我们第一次接触字符串匹配,想到的肯定是直接用2个循环来遍历,这样代码虽然简单,但时间复杂度却是\(Ω(m*n)\),也就是达到了字符串匹配效率的下限.于是后来人经过研究,构造出了著名的KMP算法 ...
- MySQL 入门(2):索引
摘要 在这篇文章中,我会先介绍一下什么是索引,索引有什么作用. 之后会介绍一下索引的数据结构是什么样的,有什么优点,又会带来什么样的问题. 在分析完数据结构后,我们可以根据这个数据结构,研究索引的用法 ...