Fetch API 将损坏的 Excel 文件上传到 Dropbox
Fetch API uploads corrupted Excel files to Dropbox
我正在使用 Dropbox SDK JS ("dropbox": "^10.10.0"
) 通过 filesGetTemporaryUploadLink
上传文件,此方法 returns 用于文件上传的临时 URL。
我上传文件的方式:
const fileUploadResult = await fetch(uploadDestination.url, {
body: fileData,
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/octet-stream"
},
method: "POST",
mode: "cors"
});
当我上传 PDF 时,一切正常,但当我尝试上传 .xlsx
文件时,该文件以损坏的方式上传。
我尝试使用 Content-Type
,但是当我将 application/octet-stream
更改为 Excel 的 MIME (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
) 或 binar/octet-stream
,我得到错误:
Failed to load resource: the server responded with a status of 400 (Bad Request)
这很奇怪,通过 POST
和 Fetch API 发送 PDF 和 Excel 文件有什么区别?
作为@Greg mentioned,问题是 FormData
对文件进行了不必要的包装,一旦我删除了包装,一切正常:
const fileData = domRef.files[0];
const fileUploadResult = await fetch(uploadDestination.url, {
body: fileData,
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/octet-stream"
},
method: "POST",
mode: "cors"
});
我正在使用 Dropbox SDK JS ("dropbox": "^10.10.0"
) 通过 filesGetTemporaryUploadLink
上传文件,此方法 returns 用于文件上传的临时 URL。
我上传文件的方式:
const fileUploadResult = await fetch(uploadDestination.url, {
body: fileData,
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/octet-stream"
},
method: "POST",
mode: "cors"
});
当我上传 PDF 时,一切正常,但当我尝试上传 .xlsx
文件时,该文件以损坏的方式上传。
我尝试使用 Content-Type
,但是当我将 application/octet-stream
更改为 Excel 的 MIME (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
) 或 binar/octet-stream
,我得到错误:
Failed to load resource: the server responded with a status of 400 (Bad Request)
这很奇怪,通过 POST
和 Fetch API 发送 PDF 和 Excel 文件有什么区别?
作为@Greg mentioned,问题是 FormData
对文件进行了不必要的包装,一旦我删除了包装,一切正常:
const fileData = domRef.files[0];
const fileUploadResult = await fetch(uploadDestination.url, {
body: fileData,
cache: "no-cache",
credentials: "same-origin",
headers: {
"Content-Type": "application/octet-stream"
},
method: "POST",
mode: "cors"
});