`

django 流式大文件文件下载

阅读更多

写在最前面:

        不要用ajax请求下载文件,只会返回类似json的数据。因为ajax不支持。

         可以用form形式请求。

         例如

          $('.export_data').click(function () {

       Toastr('message', "开始下载数据", 'success')
       const currentUrl = window.location.href
       var $editor = ace.edit("editor");
var input_sql = $editor.getValue()
       var url = currentUrl + 'export_data/';
console.log(url)
       /**
       * 使用form表单来发送请求
       * 1.method属性用来设置请求的类型――post还是get
       * 2.action属性用来设置请求路径。
       *
       */
var form=$("<form>");//定义一个form表单
form.attr("style","display:none");
form.attr("target","");
form.attr("method","get"); //请求类型
form.attr("action",url); //请求地址
var sql=$("<input>");
sql.attr("type","hidden");
sql.attr("name","sql");
sql.attr("value",input_sql);
form.append(sql);
$(document.body).append(form)
       form.submit()
});

  

最简单的文件下载功能的实现

将文件流放入HttpResponse对象即可,如:

这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃

更合理的文件下载功能

Django的HttpResponse对象允许将迭代器作为传入参数,将上面代码中的传入参数c换成一个迭代器,便可以将上述下载功能优化为对大小文件均适合;而Django更进一步,推荐使用 StreamingHttpResponse对象取代HttpResponse对象,StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,对于文件下载功能,使用StreamingHttpResponse对象更合理。

因此,更加合理的文件下载功能,应该先写一个迭代器,用于处理文件,然后将这个迭代器作为参数传递给StreaminghttpResponse对象,如:

 

文件下载功能再次优化

上述的代码,已经完成了将服务器上的文件,通过文件流传输到浏览器,但文件流通常会以乱码形式显示到浏览器中,而非下载到硬盘上,因此,还要在做点优化,让文件流写入硬盘。优化很简单,给StreamingHttpResponse对象的Content-TypeContent-Disposition字段赋下面的值即可,如:

完整代码如下:

分享到:
评论

相关推荐

    Django 大文件下载实现过程解析

    在Django框架中,处理大文件下载是一项挑战,因为直接将大文件内容加载到内存可能会导致内存溢出。本文将详细解析如何在Django中实现大文件的下载过程,包括几种不同的方法,以及如何优化性能和用户体验。 首先,...

    Django实现文件上传和下载功能

    第二种是使用`StreamingHttpResponse`对象来处理文件下载,这种响应类型允许流式传输文件内容,即在响应生成的过程中持续传输数据给客户端,而不是先在服务器内存中构建完整的响应内容。这样做可以减少内存的使用,...

    Python+django实现文件下载

    在Python和Django框架中,实现文件下载是一个常见的需求,特别是在构建Web应用时。这篇文章将详细探讨两种不同的方法来实现在Django中提供文件下载功能。 ### 方法一:使用HTML的`&lt;a&gt;`标签 这种方法相对简单,适用...

    详解django三种文件下载方式

    在Django框架中,文件下载是一个常见的需求,例如导出Excel报表、PDF文档或普通文件。本篇文章将详细解析Django实现文件下载的三种方法,包括HttpResponse、StreamingHttpResponse和FileResponse。 1. **...

    python django下载大的csv文件实现方法分析

    在Python的Django框架中,下载大CSV文件的实现是一个重要的功能,特别是在处理大量数据时。传统的文件处理方式可能会导致内存溢出,因为一次性将所有数据加载到内存中。为了解决这个问题,我们可以利用`...

    简单了解django文件下载方式

    在Django框架中,文件下载是一项常见的需求,例如下载Excel表格、PDF文档或是其他类型的数据文件。本篇文章将深入探讨Django中实现文件下载的三种主要方式:HttpResponse、StreamingHttpResponse和FileResponse。...

    文件上传下载8个源码示例

    - **流式传输**:为了处理大文件下载,服务器通常采用流式传输,避免一次性加载整个文件到内存中,这可以有效减少内存消耗。 - **断点续传**:对于大文件,支持断点续传功能能提升用户体验。通过记录已下载部分的...

    基于Django与HDFS的分布式三维模型文件数据库构建.pdf

    基于Django框架和Hadoop分布式文件系统(HDFS)搭建的分布式三维模型文件数据库,正是为了解决传统单一存储问题而生。 首先,要了解的是云存储的概念。云存储是云计算技术的延伸,利用网络技术将多台服务器的硬盘或...

    Python库 | django-s3file-0.6.1.tar.gz

    4. **流式上传和下载**:库提供了流式处理功能,使得大文件的上传和下载更加高效,减少内存占用。 5. **兼容性**:`django-s3file`与Django的内置FileField和ModelForm无缝集成,只需简单的配置就能使用,且兼容...

    文件上传与下载

    例如,使用Java的Spring框架,可以通过`StreamingResponseBody`来流式传输文件内容,提高大文件下载的效率。 至于标签中的“源码”,通常指的是为了实现文件上传与下载功能所编写的程序代码。开发者可以通过查看...

    PyPI 官网下载 | django-queryset-csv-1.0.2.tar.gz

    本次我们将关注一个名为`django-queryset-csv`的Python库,其版本为1.0.2,可以从PyPI官网下载到的压缩文件为`django-queryset-csv-1.0.2.tar.gz`。这个库专门为Django框架提供了一个方便的功能,即能够将Django查询...

    bootstrap 文件上传组件 fileinput 实现文件批量上传

    - 对于大文件上传,考虑使用分块上传或流式上传,以减少内存占用和提高上传效率。 通过上述内容,你应该对Bootstrap File Input组件有了全面的认识,能够轻松实现文件批量上传的功能。实践中,根据具体项目需求...

    文件上传下载

    二、文件下载 1. HTTP响应:文件下载通常通过HTTP的GET请求实现,服务器返回200状态码,并在响应头中设置`Content-Disposition: attachment`,告知浏览器以附件形式下载文件。 2. 文件名指定:在响应头中使用`...

    Python基于Django购物网站HTML5响应式设计源码案例设计.zip

    Django是Python中的一个高级Web框架,它遵循MTV(Model-Template-View)模式,强调快速开发和简洁实用的设计理念。模型(Model)负责数据库交互,模板(Template)处理视图呈现,视图(View)处理用户请求。通过...

    Django 中使用流响应处理视频的方法

    Django框架是Python语言编写的免费开源的高级web框架,被...这种方法特别适用于在线视频播放、视频文件下载等场景,同时支持断点续传功能,即使下载过程中断,用户也可以从上次停止的地方继续下载,而无需重新开始。

    Django 解决上传文件时,request.FILES为空的问题

    为了处理大文件,可以考虑使用流式处理或第三方库,如`django-storages`,它们支持分块上传。 总之,理解和正确设置HTML表单的`enctype`属性是解决Django文件上传问题的关键。同时,确保在Django视图中正确处理`...

    django-excel-response:Django包,可轻松呈现Excel电子表格

    4. **性能优化**: django-excel-response可能提供流式处理和内存优化,允许处理大量数据而不消耗大量内存。这对于处理大型数据集尤其重要,因为一次性加载整个电子表格可能会导致服务器崩溃。 5. **模板引擎支持**:...

    http多文件上传

    为了处理大文件,可以采用分块上传或者流式上传技术。 2. 性能优化:批量上传可能造成服务器压力,可以通过异步处理、队列系统、文件缓存等手段提高性能。 3. 安全性:确保文件内容安全,防止恶意文件上传,通常需要...

    在Python的Django框架中用流响应生成CSV文件的教程

    在Django里,流式响应StreamingHttpResponse是个好东西,可以快速、节省内存地产生一个大型文件。 目前项目里用于流式响应的一个是Eventsource,用于改善跨系统通讯时用户产生的慢速的感觉。这个不细说了。 还有一个...

Global site tag (gtag.js) - Google Analytics