后端使用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)
image.gif
这个是在本地直接启动,之后我有个文件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>
image.gif
直接运行即可。想了解更多下载可参考:
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
网友评论