我有一个api,用于通过post端点上传文件。以下是我在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)
我需要一种方法,使这个完全相同的请求使用axios在JS。
我已尝试以下操作失败:
<<ol>格式包/gh><<li> formdata-node包/gh><<li> axios-form-data包/gh>使用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端点都被击中,但是带有一个空请求。form object (api由Flask在python中构建)
当我尝试发送此请求时,我做错了什么?
同样,在我的包中设置为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);
}
});
}
fs.readFileSync("test/helpers/resources/test.csv", "utf-8")
readFileSync
返回值为字符串
axios-form-data
仅在检测到文件时工作。
根据文档使用createReadStream
(也来自fs
模块)。