Python 前后端文件下载接口代码

本文介绍了如何使用Python的Flask框架创建一个简单的文件下载接口。后端代码示例中,接口用于下载位于D:/goole_download/textUInt8Array.txt的文件。前端代码则展示了如何调用该接口进行文件下载。此外,提供了多个学习资源链接以供进一步了解文件下载的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

后端使用flask编写的简单接口:


import flask
import os
import sys
import json
from flask import request
from flask import Response


interface_path = os.path.dirname(__file__)
sys.path.insert(0, interface_path)  # 将当前文件的父目录加入临时系统变量


app = flask.Flask(__name__)


def file_iterator(file_path, chunk_size=512):
    """
        文件读取迭代器
    :param file_path:文件路径
    :param chunk_size: 每次读取流大小
    :return:
    """
    with open(file_path, 'rb') as target_file:
        while True:
            chunk = target_file.read(chunk_size)
            if chunk:
                yield chunk
            else:
                break


def to_json(obj):
    """
        放置
    :return:
    """
    return json.dumps(obj, ensure_ascii=False)


# 下载
@app.route('/download', methods=['GET'])
def download():
    """
        文件下载
    :return:
    """
    file_path = request.values.get('filepath')
    if file_path is None:
        return to_json({'success': 0, 'message': '请输入参数'})
    else:
        if file_path == '':
            return to_json({'success': 0, 'message': '请输入正确路径'})
        else:
            if not os.path.isfile(file_path):
                return to_json({'success': 0, 'message': '文件路径不存在'})
            else:
                filename = os.path.basename(file_path)
                response = Response(file_iterator(file_path))
                response.headers['Content-Type'] = 'application/octet-stream'
                response.headers["Content-Disposition"] = 'attachment;filename="{}"'.format(filename)
                return response


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

这个是在本地直接启动,之后我有个文件D:/goole_download/textUInt8Array.txt是事实存在的,这个做测试是,需要修改自己的文件名

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="http://code.jquery.com/jquery-1.10.2.js"></script>
</head>
<body>
<button type="button" id="btn1">下载一个zip(方法1)</button>
<form action="http://localhost:8000/download" method="get">
   <input type="text" name="filepath"/>
   <input type="submit" value="提交">
</form>

</body>
 <script type="text/javascript">

 var $eleBtn1 = $("#btn1");
var $eleBtn2 = $("#btn2");

//已知一个下载文件的后端接口:
https://codeload.github.com/douban/douban-client/legacy.zip/master
//方法一:window.open()
$eleBtn1.click(function(){
	var url = 'http://localhost:8000/download?filepath=D:/goole_download/textUInt8Array.txt'
	window.open(url);
});
     
 </script>
</html>

直接运行即可。想了解更多下载可参考:

https://blog.csdn.net/sinat_29774479/article/details/78404794

https://blog.csdn.net/bingpong/article/details/80572664

https://hamupp.github.io/gitblog/app/jsBasic/jsButtonDownloadFile/index.html

http://danml.com/download.html#Parameters

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值