使用iframe文件上载时如何处理HTTP错误响应?

时间:2014-12-16 11:05:38

标签: javascript asp.net-mvc asp.net-mvc-4 http iframe

我使用以下脏解决方法代码来模拟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。

1 个答案:

答案 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的票证。
  • 创建一个iframe到/newupload/dialog/<guid>,该iframe会显示指向POST /newupload/<guid>/file的文件提交表单
  • GET /newupload/guid/status
  • 上提供上传状态
  • 从提交者(iframe外部容器)检查每500ms上传的状态。
  • 上传开始时,隐藏iframe或显示一些像无尽的进度条那样花哨的东西。
  • 当上传操作完成出现故障时,请删除iframe并让用户知道它是如何运行的。

当我搬到FileReader API时......是个好日子。