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

标签: python-3.xflaskservicenow

解决方案


下面的代码向我抛出了一个错误,因为 '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)

推荐阅读