我正在使用简单的jquery ajax上传文件。 在大多数情况下,它工作正常,但有时会失败,并在服务器上显示 0 字节文件大小。谁能帮我为什么会这样..我的 Ajax 代码是:
var formData = new FormData();
formData.append("emailId", "dilshad@gmail.com");
formData.append("file1", $('#fileCtrlId')[0].files[0], $('#fileCtrlId')[0].files[0].name);
$.ajax({
async: true,
type: "POST",
url: "/fileupload.ashx",
data: formData,
processData: false,
contentType: false,
timeout: 300000, //5min
success: function (data) {
alert("success");
},
error: function (response) {
alert("Error");
}
},
failure: function (response) {
alert("failure");
}
}
});
将文件保存到磁盘的处理程序代码是:
if (!string.IsNullOrEmpty(context.Request.Params["emailid"]))
{
var emailId = context.Request.Params["emailId"];
}
int fileLength = HttpContext.Current.Request.Files[0].ContentLength;
byte[] fileBytes = new byte[fileLength];
context.Request.Files[0].InputStream.Read(fileBytes, 0, fileLength);
using (var fileStream = new System.IO.FileStream("filepath", System.IO.FileMode.Create))
{
using (var buffer = new System.IO.BinaryWriter(fileStream))
{
buffer.Write(fileBytes);
buffer.Close();
}
fileStream.Close();
}
我已经解决了这个问题。实际上,问题出在我们允许http动词方法的服务器端。在创建 COR 策略时,我们只使用允许的方法字符串数组,例如
字符串[] {"放置", "发布", "删除", "选项", "获取"}
但不幸的是,IE
不理解它,它采用逗号分隔的方法名称。
因此,我们将其更改为新的
字符串[] {"PUT, POST, DELETE, OPTIONS, GET"}
它开始工作。