【Django】应该了解的Web文件下载

原文作者:我辈理想
版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 开发应该了解的Web文件下载
第二章 Django下载文件-三种方法
第三章 Django下载文件-Office文件下载
第四章 Django下载文件-Kml文件下载
第五章 Django下载文件-pdf文件下载


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

作为一个python语言的使用者,曾经使用django框架做过前后端分离和不分离的各种网站,文件下载是一个系统的基本功能,本文主要以Django后端分离的角度来分析web端如何下载了文件。


提示:以下是本篇文章正文内容,下面案例可供参考

一、WEB下载是什么?

WEB下载方式分为HTTP与FTP两种类型,它们分别是Hyper Text Transportation Protocol(超文本传输协议)与File Transportation Protocol(文件传输协议)的缩写,它们是计算机之间交换数据的方式,也是两种最经典的下载方式,该下载方式原理非常简单,就是用户两种规则(协议)和提供文件的服务器取得联系并将文件搬到自己的计算机中来,从而实现下载的功能。

二、WEB下载的原理

具体是如何实现的呢?服务器端(就是我们后端)如何实现编码?
这里我们需要简单了解http,我们已经知道http建立连接需要3次握手,第二次握手正是服务器端向客户端传输内容,传输的内容是写在response响应中。平时我们从后端服务器通过向response写入输入流信息,前端可以通过http读取response内容获取输出流。

通俗的讲,后端传输给前端的信息,浏览器如果能够解析目标资源,则直接打开(这是前后端的日常);如果不能解析,则出现下载。直接能够解析的是超文本信息,不能解析的按照下载处理。

三、文件下载

服务器端主要处理2种文件下载:一种是服务器上有文件的下载,一种是后端通过处理后的无文件下载(可能没有生成文件)。

(一)有文件下载

1.路径下载

服务器有具体的路径,以Django框架为例,就是django项目中的media媒体文件的内容,我们把文件的django项目路径前拼接上ip生成url,在前端可以通过a标签实现下载。

<a href=“http://127.0.0.1:8000/media/111.png”>

2.文件流下载

通过文件流下载,后端就需要将文件读取出来,通过response返给前端,前端在进行浏览器的下载处理。后端需要处理http的headers信息,一般为Content-Disposition和content_type。

def download(request):
	with open(file_path, 'rb') as f:
	    response = HttpResponse(f)
	    response['Content-Disposition'] = 'attachment; filename="{0}"'.format('111.docx')
	    response['content_type'] = "application/application/octet-stream"
	    return response

(二)无文件下载

无文件下载的思路跟有文件下载是一样的,最终结果是相同的。

1.生成文件在下载

通过python的各种第三方库,将数据处理结果保存为文件,在通过有文件下载的1和2的方式下载。这里简单整理了一部分第三方库,仅供参考:

序号库名称应用
1XlsxWriter一个用于创建 Excel .xlsx 文件的 Python 模块
2xlwt / xlrd读写 Excel 文件的数据和格式信息
3openpyxl一个用来读写 Excel 2010 xlsx/xlsm/xltx/xltm 文件的库
4docxtpl通过 jinja2 模版编辑 docx 文档
5python-docx读取,查询以及修改 Microsoft Word 2007/2008 docx 文件
6python-pptx可用于创建和修改 ppt 文件的 Python 库
7ReportLab快速创建富文本 PDF 文档
8PyPDF2一个可以分割,合并和转换 PDF 页面的库
9PDFMiner一个用于从 PDF 文档中抽取信息的工具
10simplekml能够以尽可能少的工作量生成kml

2.传输文件流下载

因为处理的文件格式不同,生成流文件的方式也不同,具体应用请参考本系列的其他文章。如果有不全的可提供资源,我将在接下来的文章中更新相关内容。

四、下载乱码问题

对于下载时,我们在显示文件下载名称的时候,如果包含了中文,就可能出现乱码问题。原因在于不同的浏览器,他们在处理下载文件的时候编码不一致,ie浏览器使用的是utf-8编码,而firefox使用的是base64编码。所以在下载还需要设置编码格式。详细的请参考本系列文件下载中的示例。

总结

提示:这里对文章进行总结:

实现下载不难,我们工作中需要注重沟通,确认好双方的传输内容,比如以二进制传输还是以文件传输等,觉得文章写得还行,可以互相关注。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我辈李想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值