2

我正在使用jQuery File Upload插件来调用 Web 服务并将图像上传到服务器。

图像上传正常,我已经向 Web 服务添加了一些验证,如果图像大于 4MB,则会引发异常。

这是我使用文件上传插件的方式:

var fileUploadInput = $('#uploader').fileupload({

    dataType: 'json',
    add: function (e, data) {
        mainObject._addFile(e, data, mainObject);
    },
    done: function (e, data) {
        mainObject._fileUploadDone(e, data, mainObject);
    },
    fail: function (e, data) {
        mainObject._fileUploadFail(e, data, mainObject)
    }
});

现在,当文件上传失败时,参数data包含一个jqXHR对象如下:

readyState: 4
status: 200
statusText: "success"

在 Chrome 中,jqXHR 包含由 Web 服务引发的异常生成的可爱错误消息。在 Fiddler 中,我可以看到响应是 400 Bad Response,并且可以在响应正文中看到错误消息。

有谁知道为什么这在 IE8 中没有被选中?

更新

我们的服务器端代码的简化版本:

[OperationContract(), WebInvoke(UriTemplate = "/Images", Method = "POST")]
    public System.Guid CreateImage(System.IO.Stream Image)
    {

        //IE8 needs response to be in plain text format, or it will attempt to download the response :(
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Content-Type", "text/plain");

        //perform validation
        BLL.Errors validationErrors = BLL.Utilities.ImageFileProcessing.ValidateSizeAndFormat(multipartRequestParser.FileContents);

        //if there were errors
        if (validationErrors.Count > 0)
        {
            //send back the errors
            throw new WebFaultException<BLL.Errors>(validationErrors, System.Net.HttpStatusCode.BadRequest);
        }

        //save the image (returns the identifier for the image)
        System.Guid imageId = BLL.Custom.BeamUSBuyingWindow.DataTransferObjects.Brand.SaveImage(multipartRequestParser.FileContents);

        //set the response status and URI for created resource
        WebOperationContext.Current.OutgoingResponse.SetStatusAsCreated(new System.Uri(WebOperationContext.Current.IncomingRequest.UriTemplateMatch.BaseUri.AbsoluteUri + "/" + imageId.ToString()));

        return imageId;

    }

该方法ValidateSizeAndFormat返回一个对象数组Errors,其中包含我期望的错误文本。这是一个相当大的应用程序。

我对 Chrome 在 jqXHR 对象中发现 400 错误而 IE8 获得 200 成功感到有些困惑。尽管其他地方有类似的 Ajax 错误处理,但这个问题只发生在 File Upload 插件中。

4

1 回答 1

0

对不起我上面的评论,不在服务器端。我仔细阅读了这个页面: http: //www.checkupdown.com/status/E400.html

我在这里放了一句话,这让我大开眼界,可能也让你大开眼界:)

Do you get the error using more than one browser ?. If you have two or more Web browsers installed on your PC and the behaviour is not the same (one Web browser gives an HTTP 400 error visiting a site, another Web browser does not give the 400 error visiting the same site), then one of your browsers may be defective. Try to find an upgrade or security fix for the problem browser. If you recently changed some configuration options in the problem browser, try reversing the change to see if that helps.

另请阅读该页面的其他要点。

于 2013-06-21T05:29:04.910 回答