我正在尝试使用axios将以下curl语法转换为node.js:
curl -X POST "https://my-target-baseURL.com/elements/api/files?
path=%2Fmy-file&folderId=1234"
-H "accept: application/json"
-H "Authorization: SomeHeader 1234, OtherHeader 1234"
-H "content-type: multipart/form-data"
-F "file=@my-file.png;type=image/png"
为了将其转换,我正在做以下事情。
const fileInfo = path.parse(req.file.filename)
const fileFullName = fileInfo.name + fileInfo.ext
const folder_id = req.query.id
const readFile = util.promisify(fs.readFile)
const fullPath = path.join(__dirname, '..', 'someDirectory', fileFullName)
const file_to_upload = await readFile(`${fullPath}`)
try {
const uploaded_file = await axios.post(`${my-target-baseURL.com}/elements/api/files?path=%2F${fileFullName}&folderId=${folder_id}`,
file_to_upload,
{ headers: { 'accept': 'application/json', Authorization: `SomeHeader xyz, OtherHeader xyz`,
'content-type':'multipart/form-data',},
})
console.log('uploaded_file: ', uploaded_file.data)
}
catch(error) {
throw new Error(error)
}
执行此操作时,出现500错误(Unhandled promise rejection (rejection id: 2): Error: Error: Request failed with status code 500
)。
这里要提到的一件事是,我读取文件的方式工作正常。我之所以这样说,是因为这段代码曾经像这样读取文件并命中另一个API并获得了响应,而没有任何问题。
我找不到导致此问题的原因。我将curl转换为axios调用的方式有问题吗?我是否正确进行了-F "file=@my-file.png;type=image/png"
的转换?
答案 0 :(得分:0)
这对我来说很好,您可以在尝试并添加结果时将请求复制为CURL吗?
将报头拆分成类似
的方法也更干净const headers = {
'Accept': 'application/json',
'Authorization': `SomeHeader xyz, OtherHeader xyz`,
'Content-Type':'multipart/form-data'
}
然后做
await axios.post(`${my-target-baseURL.com}/elements/api/files?path=%2F${fileFullName}&folderId=${folder_id}`,
file_to_upload,
{headers});