python-3.x - PYTHON FLASK - request.files 显示为文件未找到,即使它退出
问题描述
我试图通过将正文中的uploadFile作为表单数据传递来触发邮递员的外部api。下面的代码向我抛出了一个错误,因为“FileNotFoundError:[Errno 2] 没有这样的文件或目录:”
注意:在邮递员中,uploadFile 从我的本地桌面获取文件作为输入。还修改了邮递员设置以允许访问工作目录以外的文件
任何帮助都将是非常可观的。
以下是代码:
@app.route('/upload', methods=['POST'])
@auth.login_required
def post_upload():
payload = {
'table_name': 'incident', 'table_sys_id': request.form['table_sys_id']
}
files = {'file': (request.files['uploadFile'], open(request.files['uploadFile'].filename,
'rb'),'image/jpg', {'Expires': '0'})}
response = requests.post(url, headers=headers, files=files, data=payload)
return jsonify("Success- Attachment uploaded successfully ", 200)
解决方案
下面的代码向我抛出了一个错误,因为 'FileNotFoundError: [Errno 2] No such file or directory:
你定义了UPLOAD_FOLDER
吗?请参阅:https ://flask.palletsprojects.com/en/latest/patterns/fileuploads/#a-gentle-introduction
我将正文中的属性(上传文件)作为表单数据传递,这可以作为原始 json 传递吗
您不能使用 JSON 上传文件。但是实现此目的的一种hacky方法是在发送文件之前对文件进行base64(有用的参考)编码。这样您就不会上传文件,而是发送以 base64 格式编码的文件内容。
服务器端:
import base64
file_content = base64.b64decode(request.data['file_buffer_b64'])
客户端:
-> Javascript:
const response = await axios.post(uri, {file_buffer_b64: window.btoa(file)})
-> 蟒蛇:
import base64
with open(request.data['uploadFile'], "rb") as myfile:
encoded_string = base64.b64encode(myfile.read())
payload = {"file_buffer_b64": encoded_string}
response = requests.post(url, data=payload)
推荐阅读
- c# - 如果将 wpf ItemsControl 与 MVVM 模式一起使用,如何将一个 ObservableCollection 作为 ItemsSource 绑定到不同的组合框(模型)?
- python - 如何加入具有不同 dtype 的两个数据框?
- android - 写入 csv 文件时重复传感器值的问题
- php - 将两个表的结果组合成 JSON 数据
- three.js - 在three.js WebGL中创建放大镜效果
- web-services - Web 服务响应 SetValues 给 Ljava.lang.Object;@ 在电子表格中
- mysql - 表内连接未显示预期结果
- php - 我做错了什么?“定时任务”
- typescript - TypeScript 错误 TS2403:后续变量声明必须具有相同的类型
- python - pyspark 在 Jupyter notebook 中打开而不是 shell