我使用以下脏解决方法代码来模拟ajax文件上传。这很好用,但是当我在maxAllowedContentLength
中设置web.config
时,我的iframe正常加载'但是错误消息为内容:
dataAccess.submitAjaxPostFileRequest = function (completeFunction) {
$("#userProfileForm").get(0).setAttribute("action", $.acme.resource.links.editProfilePictureUrl);
var hasUploaded = false;
function uploadImageComplete() {
if (hasUploaded === true) {
return;
}
var responseObject = JSON.parse($("#upload_iframe").contents().find("pre")[0].innerText);
completeFunction(responseObject);
hasUploaded = true;
}
$("#upload_iframe").load(function() {
uploadImageComplete();
});
$("#userProfileForm")[0].submit();
};
在我的Chrome控制台中,我可以看到
POST http:/ acmeHost:57810 / Profile / UploadProfilePicture / 404(不是 实测值)
我更倾向于在代码中检测此错误响应,而不是解析iframe内容并猜测存在错误。对于'离家更近errors, I have code that sends a json response, but for
maxAllowedContentLength`,IIS在我的代码被击中之前发送了404.13。
答案 0 :(得分:0)
如果您无法控制错误,则无法执行任何操作。如果提交目标与提交者位于同一个域中,并且您不受SOP限制,则可以尝试访问iframe的内容并确定其是否显示成功消息或错误消息。但是,这是一个非常糟糕的策略。
为什么选择IFRAME?这是一种痛苦。
如果您想在没有页面轻拂或转换的情况下上传文件,可以使用JS File API:File API File Upload - Read XMLHttpRequest in ASP.NET MVC
支持非常好:http://caniuse.com/#feat=filereader
对于不支持File API的旧浏览器,只提供普通表单POST。不太漂亮......但旧浏览器还可以。
<强>更新强>
由于您没有机会使用该API ......多年前我处于同样的情况,结果并不简单。基本上,我创建了一个上传票据系统,用于上传您必须的文件:
POST /newupload/
创建一个可返回GUID的票证。/newupload/dialog/<guid>
,该iframe会显示指向POST /newupload/<guid>/file
的文件提交表单GET /newupload/guid/status
当我搬到FileReader API时......是个好日子。