无法使用节点应用程序中的axios在POST请求中正确添加文件头

问题描述 投票:0回答:1

我正在尝试使用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 "[email protected];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并得到了没有任何问题的响应。

我无法找到导致此问题的原因。我将卷曲转换为axios调用的方式有问题吗?我正确地进行了-F "[email protected];type=image/png"的转换吗?

node.js http curl post axios
1个回答
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});
© www.soinside.com 2019 - 2024. All rights reserved.