我有一个通过post端点上传文件的API,这是我在python中成功做到这一点的方法:
files = {
'payload': (None, json.dumps(payload), 'application/json'),
'file': (file_name, open(full_path, 'rb'), 'application/octet-stream')
}
r = requests.post(f'{url}upload/', files=files)
我需要一种方法来使用JS中的axios来发出完全相同的请求。
我已尝试以下操作,但未成功:
1.表格数据包
1.表格数据节点程序包
- axios 形式数据包
使用axios-form-data包,我尝试发送如下请求:
async uploadFile(form_data, file_part) {
axios.interceptors.request.use(axiosFormData);
return await axios.request({
method: 'POST',
url: `${url}`upload/',
data: {
payload: 'Non-file value',
file: fs.readFileSync("test/helpers/resources/test.csv", "utf-8");
}
});
}
每一次,对于每一个库,我的API端点都被命中,但是带有一个空的request.form对象(API是用Python中的Flask构建的)
尝试发送此请求时我做错了什么?
另外,在我的package.json文件中,这被设置为type: module
,所以我不能使用CommonJS包。
编辑:将axios-form-data函数更改为,仍然不成功:
async uploadFile(form_data, file_path) {
axios.interceptors.request.use(axiosFormData);
return await axios.request({
method: 'POST',
url: `${url}`upload/',
data: {
payload: 'Non-file value',
file: fs.createReadStream(file_path);
}
});
}
1条答案
按热度按时间yduiuuwa1#
第一个月
readFileSync
的返回值是一个字符串。axios-form-data
仅在检测到 * 文件 * 时才起作用。按照the documentation使用
createReadStream
(也来自fs
模块)。