我有一个文件上传页面,允许上传多个文档。
当我在良好的连接下使用它时,它工作得很好:对于每个单独的文件,我的控制器操作都会被调用,并且
Request.Files
确实包含一个文件。
但是,当我使用开发人员工具(GPRS 速度)模拟连接不良时,当调用我的控制器操作时,
Request.Files
为空。
我还尝试使用中等连接(3G),我得到了两者的混合:两个文件已成功上传,并且我在
Request.Files
中为每个文件都有一个文件,而另外两个则失败,Request.Files
为空了。
这是正常行为吗?我想知道的是我的代码中是否有问题,或者我是否在浪费时间尝试修复无法避免的问题。
我看到的有关此问题的所有问题都表明我应该为表单的
multipart/form-data
属性指定 enctype
,但这不是我的问题的解决方案,因为它在良好的连接下工作得很好。
@Gunnarhawk,这就是我执行 AJAX 调用的方式:
return $.ajax({
url: '@Url.Action("GetUploadedFileList", "Process", new { claimId = @claimId })',
method: 'POST',
contentType: "application/json; charset=utf-8",
dataType: 'html',
cache: false,
data: dataJson, // Object as JSON text
processData: false,
traditional: true,
success: function (response) {
// Stuff...
},
error: function () {
// Stuff...
}
});
您可以尝试增加执行超时或最大请求长度(以允许上传更大的文件并使页面运行更长时间)。
<httpRuntime maxRequestLength="byte size limit" executionTimeout="timeout in seconds" />
请参阅有关 maxRequestLength 的 文档
最大请求大小(以千字节为单位)。默认大小为 4096 KB (4 MB)。
还有关于执行超时的文档
TimeSpan 值,指示请求允许的执行时间。
我相信executionTimeout的时间以秒为单位,所以如果你将其设置为300,那就是5分钟。
这样做可能会导致公共应用程序受到恶意用户的攻击,尝试上传非常大的文件,因此请注意。
您可以使用
<location href="path">
元素将更改范围限制到应用程序中的特定页面。请参阅 Microsoft 文档中有关位置 的更多信息。