Python Flask接收Node.js Got庫文件上傳時request.files為空問題排查

問題背景

在使用Node.js的got庫向Python Flask后端發(fā)送文件上傳請求時,可能會遇到request.files為空,但文件數(shù)據(jù)卻出現(xiàn)在request.form中的情況。本文將分析問題的原因,并提供正確的解決方案。

原因分析

1.未正確設(shè)置filename

當(dāng)使用FormData.append()上傳Buffer或二進制數(shù)據(jù)時,如果沒有指定filename,F(xiàn)lask可能無法正確識別文件數(shù)據(jù),導(dǎo)致數(shù)據(jù)被解析為普通表單字段(request.form)。

示例錯誤代碼:

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

2. Content-Type被錯誤覆蓋

got庫在發(fā)送FormData時會自動設(shè)置multipart/form-data,但如果手動指定Content-Type,可能會破壞請求的boundary,導(dǎo)致Flask解析失敗。

3.Flask接收方式錯誤

如果后端未正確使用request.files,或者文件字段名稱不匹配,也會導(dǎo)致數(shù)據(jù)被存入request.form。

解決方案

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

formData.append('file', bufferData, {
    contentType: 'audio/mpeg',
    filename: 'audio.mp3' // 關(guān)鍵:必須提供文件名
});

2.避免手動設(shè)置Content-Type

got會自動處理,無需額外設(shè)置:

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

3.檢查Flask接收代碼

確保使用request.files獲取文件:

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

總結(jié)

Flask接收不到request.files通常是由于前端未正確設(shè)置filename或請求頭問題。通過規(guī)范FormData的構(gòu)造和確保后端正確解析,即可解決該問題。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容