无法在xmlHttpRequest中更改Content-Type。

16 浏览
0 Comments

无法在xmlHttpRequest中更改Content-Type。

我尝试在发送xhr数据之前设置Content-Type,如下所示:

function uploadFile() {
  var files =  document.getElementById("file1").files[0];
  var formdata = new FormData();
  formdata.append("Key", files);
  ajax = new XMLHttpRequest();
  ajax.upload.addEventListener("progress", progressHandler, false);
  ajax.addEventListener("load", completeHandler, false);
  ajax.addEventListener("error", errorHandler, false);
  ajax.addEventListener("abort", abortHandler, false);  
  ajax.open("POST", "./Save");  
  ajax.setRequestHeader('Content-Type', 'multipart/form-data;'); 
  ajax.send(formdata);
}

通过更改内容类型,我无法在服务器端获取数据。

如果我删除设置内容类型的代码,它可以正常工作。

我的服务器端代码如下:

HttpContext.Current.Request.Files["Key"]

有什么建议吗?

0
0 Comments

问题的原因是,当设置Content-Typemultipart/form-data时,应该紧跟着设置boundary,但是因为你显式设置了Content-Type,所以没有设置boundary

解决方法是,不设置Content-Type或者设置boundary。如果不设置Content-Type,XMLHttpRequest会自动识别你正在发送文件。你可以参考这个链接:fetch - Missing boundary in multipart/form-data POST

至于你说的动态更新boundary值的问题,如何设置boundary?我不确定你是否可以在不修改内容的情况下进行设置。而且,不设置Content-Type并依赖默认行为有什么问题呢?

我是说,boundary部分------WebKitFormBoundaryrKBH6bAMJIdepLCI 在内容中用于标识文件的开头和结尾;所以你在Content-Type中设置的boundary应该根据内容来设置(它们应该匹配)。

0