使用 fetch 上传二进制文件

Ron*_*hen 7 binary fetch zendesk-api

我正在尝试将文件上传到 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
Run Code Online (Sandbox Code Playgroud)

这是我的代码的样子,而文件是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
  }
)
Run Code Online (Sandbox Code Playgroud)

问题是最终文件由于WebKitFormBoundary页眉和页脚而损坏。

这是我尝试过的:

  1. "Content-Type: application/binary"按照 API 的预期设置标头。

  2. 将文件传递给 fetchbody而不FormData(按原样)。

  3. FileReader.readAsBinaryString在将其传递到身体之前使用。

我的尝试都没有成功 - 服务器返回错误,我能够创建文件的唯一方法是使用FormData和不使用任何Content-Type标题,但我没有找到摆脱WebKitFormBoundary页眉和页脚的方法。

例如:

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


------WebKitFormBoundaryragq26qGRKa2B9Qg--
Run Code Online (Sandbox Code Playgroud)

Ron*_*hen 3

以下代码对我有用:

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