【问题标题】:PYTHON FLASK - request.files displays as file not found eventhough it exitsPYTHON FLASK - request.files 显示为文件未找到,即使它存在
【发布时间】:2026-02-03 04:20:07
【问题描述】:

我正在尝试通过将正文中的 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 传递吗?

标签: python-3.x flask servicenow


【解决方案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)

【讨论】: