Загрузка бинарного файла с использованием fetch - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь загрузить файл в Zendesk, вот API:

curl "https://{subdomain}.zendesk.com/api/v2/uploads.json? 
filename=myfile.dat&token={optional_token}" \
-v -u {email_address}:{password} \
-H "Content-Type: application/binary" \
--data-binary @file.dat -X POST

Вот так выглядит мой код, пока файл File object Я получаю из дропзоны:

const formData = new FormData();
formData.append("file", file);

fetch(
  "https://{my-domain}.zendesk.com/api/v2/uploads.json?filename=" + file.name,
  {
    method: "POST",
    body: formData
  }
)

Проблема в том, что окончательный файл поврежден из-за заголовка и нижнего колонтитула WebKitFormBoundary.

Это то, что я пробовал:

  1. Установка заголовка "Content-Type: application/binary", так как это то, что ожидает API.

  2. Передача файла в выборку body без FormData (как есть).

  3. Использование FileReader.readAsBinaryString перед передачей его телу.

Ни одна из моих попыток не сработала - сервер вернул ошибку, единственный способ создатьфайл с FormData и без заголовка Content-Type, но я не нашел способа избавиться от заголовка и нижнего колонтитула WebKitFormBoundary.

Например:

------WebKitFormBoundaryragq26qGRKa2B9Qg
Content-Disposition: form-data; name="file"; filename="README.md"
Content-Type: text/markdown


------WebKitFormBoundaryragq26qGRKa2B9Qg--

1 Ответ

0 голосов
/ 13 октября 2018

У меня работал следующий код:

fetch(
  "https://{my-domain}.zendesk.com/api/v2/uploads.json?filename=" + file.name,
  {
   method: "POST",
   body: file,
   headers: {
    "Content-type": file.type
   }
  }
 )
...