PYTHON FLASK - request.files 显示为文件未找到,即使它存在
Posted
技术标签:
【中文标题】PYTHON FLASK - request.files 显示为文件未找到,即使它存在【英文标题】:PYTHON FLASK - request.files displays as file not found eventhough it exits 【发布时间】:2021-05-17 07:34:25 【问题描述】:我正在尝试通过将正文中的 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)
【问题讨论】:
有人可以帮忙吗?真的被这个问题困住了。 请在请求和响应正文中发布邮递员请求的屏幕截图和日志。 你定义了UPLOAD_FOLDER
吗?请看:flask.palletsprojects.com/en/latest/patterns/fileuploads/…
非常感谢。我通过创建一个文件夹并在上传文件之前保存文件解决了这个问题。截至目前,我将正文中的属性(上传文件)作为表单数据传递,这可以作为原始 json 传递吗?
【参考方案1】:
下面的代码给我一个错误,因为'FileNotFoundError:[Errno 2]没有这样的文件或目录:
你定义了UPLOAD_FOLDER
吗?请看:https://flask.palletsprojects.com/en/latest/patterns/fileuploads/#a-gentle-introduction
我将 body 中的属性(上传文件)作为表单数据传递,可以将其作为原始 json 传递
您不能使用 JSON 上传文件。但是实现此目的的一种hacky 方法是在发送文件之前对文件进行base64 (useful reference) 编码。这样您就不会上传文件,而是发送以 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))
-> Python:
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)
【讨论】:
以上是关于PYTHON FLASK - request.files 显示为文件未找到,即使它存在的主要内容,如果未能解决你的问题,请参考以下文章
python Python Flask WSGI路由技术#python #flask #wsgi