Невозможно правильно добавить заголовок файла в запросе POST, используя axios в приложении узла - PullRequest
0 голосов
/ 06 сентября 2018

Я пытаюсь преобразовать следующий синтаксис curl в node.js, используя axios:

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"?

1 Ответ

0 голосов
/ 06 сентября 2018

Это выглядит хорошо для меня, можете ли вы скопировать ваш запрос как 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});
...