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 推荐阅 ...
随机推荐
- sql语句-------重复时插入更新
ON DUPLICATE KEY UPDATE重复时插入更新 insert into user(id,username) value('231',"二人") on duplicat ...
- kubeadm 默认镜像配置问题引申
背景: 每次使用功能kubeadm的时候都需要提前准备好镜像,为什么自定义使用的镜像源呢? 在没有翻越围墙时 kubeadm init --kubernetes-version=v1.13.0 --p ...
- 创建线程的方式三:实现Callable接口-----JDK5.0 新增
package com.yhqtv.java2; /* * 创建线程的方式三:实现Callable接口-----JDK5.0 新增 * * 如何理解实现Callable接口的方式创建多线程比实现Run ...
- opencv-10-图像滤波-噪声添加与均值滤波-含opencv C++ 代码实现
开始之前 再说上一篇文章中, 我们想按照噪声产生, 然后将降噪的, 但是限于篇幅, 我就放在这一篇里面了, 说起图像的噪声问题就又回到了我们上一章的内容, 把噪声当作信号处理, 实际上数字图像处理实际 ...
- 斐波那契数列计算html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- struts2验证码
验证码大多是jsp,servlet写的. 我拿来主义了, 再自己完善了一下(我一直努力想要站在巨人的肩膀) 首先是页面 test.jsp <%@ page contentType=" ...
- GPTL—练习集—006树的遍历
#include<bits/stdc++.h> using namespace std; typedef int daTp;//datatype typedef struct BTNode ...
- 【COCOS2DX-LUA 脚本开发之四】使用tolua++编译pk创建自定义类
此篇基本[COCOS2DX(2.X)_LUA开发之三]在LUA中使用自定义精灵(LUA脚本与自创建类之间的访问)及LUA基础讲解 在Lua第三篇中介绍了,如何在cocos2dx中使用Lua创建自定义类 ...
- #Lab0 Environment Building
清华提供了实验环境的很多选项,具体可以参考README 我选择用虚拟机完成. 一.安装VirtualBox 下载链接 一路next,我的版本是6.0.4. 二.下载虚拟硬盘文件 实验所需的软件都在虚拟 ...
- 疯子的算法总结(九) 图论中的矩阵应用 Part 2 矩阵树 基尔霍夫矩阵定理 生成树计数 Matrix-Tree
定理: 1.设G为无向图,设矩阵D为图G的度矩阵,设C为图G的邻接矩阵. 2.对于矩阵D,D[i][j]当 i!=j 时,是一条边,对于一条边而言无度可言为0,当i==j时表示一点,代表点i的度. 即 ...