我尝试从React上传CSV文件到我的Flask后端。我的代码如下所示。使用下面的代码,Flask返回400(Axios错误)。
当我将 flask 更改为print(request.files)
时,它打印ImmutableDict([])
,并且它似乎没有任何数据(我认为是这样的..)
错误:
AxiosError {message: 'Request failed with status code 400', name: 'AxiosError', code: 'ERR_BAD_REQUEST', config: {…}, request: XMLHttpReques
App.js:
let handleSubmit = async (e) => {
e.preventDefault()
let file = csvFile
const formData = new FormData()
formData.append("file", file)
axios
.post("http://127.0.0.1:5000/reactTest", formData)
.then((res) => console.log(res))
.catch((err) => console.warn(err))
...
<input
type='file'
value={csvFile}
name='csvFile'
/>
<button type='submit' onClick={handleSubmit}></button>
api.py:
@app.route('/reactTest', methods=['POST'])
def reactTest():
if request.method == 'POST':
# print(request.files)
print(request.files['file'])
return {'status': 200}
3条答案
按热度按时间z31licg01#
<input type="file">
不能是受控组件,因为由于浏览器安全限制,您无法设置value
。您甚至可以将一个
HTMLFormElement
传递到FormData
来捕获所有的输入。请注意,文件输入的名称现在是 “file”,以匹配您在
FormData
中所需的字段。kzmpq1sx2#
要得到一个输入的文件.你需要使用(注意你需要指定输入索引):
如果您要取得dict而非可变更的dict,请使用'to_dict()'
h7wcgrx33#
您需要为请求指定
Content-Type: multipart/form-data
标头,以便将其识别为包含文件: