繁体   English   中英

在Ubuntu中使用fetch和formdata上传文件成功,但在Windows 10中失败

[英]Uploading a file using fetch and formdata succeeds in Ubuntu but failed in Windows 10

伙计们 这些天我遇到了一个令人讨厌的问题。

我正在尝试使用FormData类型中的访存将文件上传到服务器端,如下所示:

export function buildFormData(request) {
  const formData = new window.FormData();
  for (const name in request) {
    formData.append(name, request[name]);
  }
  return formData;
}

接着

export function checkImported(file) {
  const formData = UTILS.buildFormData({ file });
  return fetch(`${ServerConst.SERVER_CONTEXT_PATH}/import/check`, {
    method: 'POST',
    body: formData,
  }).then(response => response.json());
}

Ubuntu中 ,请求为:

在此处输入图片说明

Windows 10中是:

在此处输入图片说明

我所不同地检查的是请求有效负载 ,在Windows 10中是应用程序/八位字节流 ,而在Ubuntu中是text / csv

但是,当我尝试为提取添加标头时 ,如下所示:

export function checkImported(file) {
  const formData = UTILS.buildFormData({ file });
  return fetch(`${ServerConst.SERVER_CONTEXT_PATH}/import/check`, {
    method: 'POST',
    headers: { 'Content-Type': 'multipart/form-data; text/csv' },
    body: formData,
  }).then(response => response.json());
}

,它也会在ubuntu中失败(服务器端会提示我有关the request was rejected because no multipart boundary was found 。并且在这篇文章中对此原因进行了清楚的解释。

有人可以帮忙吗? 非常感谢你!

最好的祝福,听见。

这是由于java中的后端验证所致,该验证将过滤掉仅保留“ Content-Type:text / csv”的其他类型。

如您所见,在Windows中, Request Payload的Content-Type是application / octet-stream

由于前端可以通过上载中的accept过滤掉所有非csv文件,因此我删除了后端中的验证并解决了问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM