【问题标题】:Not able to change Content-Type in xmlHttpRequest无法更改 xmlHttpRequest 中的 Content-Type
【发布时间】:2018-09-05 09:46:05
【问题描述】:

我尝试在发送 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"]

有什么建议吗?

【问题讨论】:

  • 尝试删除'multipart/form-data;'中的分号
  • 嗨@Dummy,我已经尝试过了,但它不起作用。它仅在删除 Content-Type 更改代码时有效。
  • 您的 HTML <form> 是否像 <form enctype="multipart/form-data" method="post" 一样包含 enctype?您是否也可以尝试转义/ 尝试:ajax.setRequestHeader('Content-Type','multipart\/form-data;');
  • 嗨@caramba,我没有在表单中使用 with。我已经尝试过你的建议,但它不起作用

标签: javascript


【解决方案1】:

问题是Content-type: multipart/form-data 后面应该跟boundary: (your file boundary) 但是因为你明确设置它不存在

Content-type: multipart/form-data; boundary=----WebKitFormBoundaryrKBH6bAMJIdepLCI

如果您没有设置Content-type,那么XHR 足够聪明,可以理解您正在发送文件,所以我建议您不要设置它或设置boundary

(看这里fetch - Missing boundary in multipart/form-data POST

【讨论】:

  • 嗨@david.lucky,我也尝试过设置边界值。但不起作用。边界值是否已被浏览器动态更新?
  • 你是如何设置边界的?我不确定你是否可以在不修改内容的情况下做到这一点(我猜你没有)。还有 - 不设置内容类型并依赖默认行为有什么问题?
  • 你是什么意思,“我不确定你是否可以在不修改内容的情况下做到这一点”。
  • 我的意思是这个边界部分------WebKitFormBoundaryrKBH6bAMJIdepLCI 在内容中用来标识文件开始和文件结束;所以你的内容类型边界应该根据内容设置(它们应该匹配)
猜你喜欢
  • 2012-07-28
  • 2012-07-11
  • 1970-01-01
  • 2023-03-21
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2017-07-10
  • 2014-01-06
相关资源
最近更新 更多