一、创建 flask 实现上传、与下载功能
from flask import Flask, render_template, request, session, send_file, make_response, redirect
from werkzeug.utils import secure_filename
import os
# api接口
app = Flask(__name__)
UPLOAD_PATH = 'out_data/input'
os.makedirs(UPLOAD_PATH,exist_ok=True)
def allowed_file(filename):
return "." in filename and filename.rsplit('.', 1)[1].lower() in set(['txt','mp3'])
@app.route('/upload/', methods=['GET', 'POST'])
def upload():
if request.method == 'GET':
return render_template('upload.html')
else:
file = request.files.get('pic') # 获取文件
# 上传空文件(无文件)
if file.filename == '':
return redirect(request.url)
# 只能上传 allowed_file() 限制的文件
if file and allowed_file(file.filename):
filename = secure_filename(file.filename) # 用这个函数确定文件名称是否是安全 (注意:中文不能识别)
outpath = os.path.join(UPLOAD_PATH, filename)
file.save(outpath) # 保存文件
# 返回该保存好的文件,as_attachment=True 自动弹出下载
return send_file(outpath, as_attachment=True)
else:
return redirect(request.url)
if __name__ == '__main__':
app.run( debug=True)
HTML 界面,保存 templates/upload.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<form action="/upload/" method="post" enctype="multipart/form-data">
上传文件:<input type="file" name="pic"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
二、代码调用
import requests
# 设置上传文件的URL
url = 'http://0.0.0.0:8888/upload/'
# 设置要上传的文件路径
file_path = r".\*.*"
# 设置下载文件的文件路径
out_file_path = r".\*.*"
with open(file_path, 'rb') as file:
files = {'pic': file}
response = requests.post(url, files=files)
if response.status_code == 200:
print("文件上传成功 等待处理...")
# 下载返回文件
with open(out_file_path, 'wb') as f:
f.write(response.content)
print('输出成功')
else:
print(f"文件上传失败,状态码:{response.status_code}")
# 可以处理错误情况,例如打印错误信息
print(response.text)
网页调用
输入网址 http://0.0.0.0:8888/upload/ ,选择文件+提交,成功上传,自动弹出下载页面