• 【开发应该了解的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标签实现下载。

    
    

    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
    • 2
    • 3
    • 4
    • 5
    • 6

    (二)无文件下载

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

    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编码。所以在下载还需要设置编码格式。详细的请参考本系列文件下载中的示例。

    总结

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

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

  • 相关阅读:
    Android 系统的异常信息捕获
    pycocotools安装
    开发指南048-前端模块版本
    ASP.NET Core 6框架揭秘实例演示[05]:依赖注入基本编程模式
    Vue2+Vue3笔记(尚硅谷张天禹老师)day03
    使用IDEA创建一个SpringBoot项目
    【Python零基础入门篇 · 3】:掌握数值类型、进制的转换
    Gem5模拟器学习之旅——翻译自官网
    图像相似度对比分析软件,图像相似度对比分析法
    有成效的工作
  • 原文地址:https://blog.csdn.net/qq_15028721/article/details/127845306