Python Flask接收Node.js Got库文件上传时request.files为空问题排查

问题背景

在使用Node.js的got库向Python Flask后端发送文件上传请求时,可能会遇到request.files为空,但文件数据却出现在request.form中的情况。本文将分析问题的原因,并提供正确的解决方案。

原因分析

1.未正确设置filename

当使用FormData.append()上传Buffer或二进制数据时,如果没有指定filename,Flask可能无法正确识别文件数据,导致数据被解析为普通表单字段(request.form)。

示例错误代码:

formData.append('file', bufferData, { contentType: 'audio/mpeg' }); // 缺少filename

2. Content-Type被错误覆盖

got库在发送FormData时会自动设置multipart/form-data,但如果手动指定Content-Type,可能会破坏请求的boundary,导致Flask解析失败。

3.Flask接收方式错误

如果后端未正确使用request.files,或者文件字段名称不匹配,也会导致数据被存入request.form。

解决方案

1.确保FormData.append()包含filename

formData.append('file', bufferData, {
    contentType: 'audio/mpeg',
    filename: 'audio.mp3' // 关键:必须提供文件名
});

2.避免手动设置Content-Type

got会自动处理,无需额外设置:

const response = await got.post(url, { body: formData });

3.检查Flask接收代码

确保使用request.files获取文件:

file = request.files['file']  # 字段名需匹配前端

总结

Flask接收不到request.files通常是由于前端未正确设置filename或请求头问题。通过规范FormData的构造和确保后端正确解析,即可解决该问题。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容