无法在xmlHttpRequest中更改Content-Type。
无法在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"]
有什么建议吗?
问题的原因是,当设置Content-Type
为multipart/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应该根据内容来设置(它们应该匹配)。