【问题标题】:Fine Uploader - No valid message received from loaded iframeFine Uploader - 未从加载的 iframe 收到有效消息
【发布时间】:2015-03-17 13:18:23
【问题描述】:

尝试使现有的精细上传程序 v4.2.2 实例与 IE8 一起工作,但是它返回“没有从加载的 iframe 收到有效消息”。

阅读 3.3 和 3.7 CORS support 博客文章 - 修改了我的 .net MVC 处理程序以检测非 XHR 请求并做出相应反应。在客户端已经将 CORS 属性“expected”设置为 true,但尝试将“sendCredentials”和“allowXdr”的组合设置为 true,但没有明显效果。

使用 Fiddler 确认我返回了正确的内容类型 (text/html),通常的 JSON 响应后跟一个脚本块,指向“iframe.xss.response.js”的有效 URL - 尝试托管主 URL 和上传处理程序子域。

在当前的浏览器中一切仍然运行良好,只是感觉我在尝试支持 IE8 时遗漏了一些明显的东西。

这是我清理过的 JS;

var fupParams = {
    userId: 12345,
    userKey: 67890
};

var fupInstance = $("#fine-uploader")
    .fineUploader({
        template: "qq-template",
        thumbnails: {
            placeholders: {
                waitingPath: "/placeholders/waitingPath.gif",
                notAvailablePath: "/placeholders/notAvailablePath.gif"
            }
        },
        session: {
            endpoint: "//upload.example.com/Upload/List",
            params: fupParams
        },
        request: {
            endpoint: "//upload.example.com/Upload/Upload",
            params: fupParams
        },
        failedUploadTextDisplay: {
            mode: "custom"
        },
        deleteFile: {
            customHeaders: {},
            enabled: true,
            endpoint: "//upload.example.com/Upload/Delete",
            method: "DELETE",
            forceConfirm: true,
            params: fupParams
        },
        validation: {
            allowedExtensions: Array("jpg","png")
        },
        cors: {
            expected: true,
            sendCredentials: false
        },
        autoUpload: true,
        editFilename: {
            enabled: true
        },
        classes: {
            success: "alert alert-success",
            fail: "alert alert-error"
        },
        showMessage: function (message) {
            // Simple event handler
        }
    })
    .on("submit", function (event, id, name) {
        // Use qq.Promise() to modify fupParams prior to upload
    })
    .on("submitDelete", function (event, id, name) {
        // Use qq.Promise() to modify fupParams prior to delete
    })
    .on("error", function (event, id, name, errorReason, xhrOrXdr) {
        // Simple event handler
    })
    .on("complete", function (event, id, name, response) {
        // Simple event handler
    })
    .on("sessionRequestComplete", function (event, response, success, xhrOrXdr) {
        // Simple event handler
    })
    .on("deleteComplete", function (event, id, xhrOrXdr, isError) {
        // Simple event handler
    })
;

包括通过 Fiddler 捕获的两个上传处理程序响应,第一个成功设置为 false,因为我选择的图像太小;

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials: false
Date: Tue, 17 Mar 2015 12:47:54 GMT
Content-Length: 204

{
  "success": false,
  "error": "Minimum upload size is 150 KB, \"Winter.jpg\" was 103 KB"
}<script src="//www.example.com/fineuploader-4.2.2/iframe.xss.response.js"></script>

IE 立即获取“waitingPath.gif”和“iframe.xss.response.js”,但我没有看到任何自定义错误文本 - 只是“无有效消息”错误。

由于图像较大,第二次捕获成功设置为true,我们正在返回一些自定义参数,结果与上述相同。

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials: false
Date: Tue, 17 Mar 2015 12:51:18 GMT
Content-Length: 278

{
  "pageList": [],
  "name": "Winter 2.JPG",
  "uuid": "2563",
  "size": 281,
  "thumbnailUrl": null,
  "pageCount": 0,
  "success": true,
  "newUuid": "2563"
}<script src="//www.example.com/fineuploader-4.2.2/iframe.xss.response.js"></script>

编辑:感谢您的帮助,我的回答要么错误地使用了 UUID,要么完全丢失了它 - 请参阅下面的最终结果。

成功

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials: false
Date: Tue, 17 Mar 2015 15:01:57 GMT
Content-Length: 310

{
  "pageList": [],
  "name": "Winter 2.JPG",
  "newUuid": "2567",
  "size": 281,
  "thumbnailUrl": null,
  "pageCount": 0,
  "success": true,
  "uuid": "6cb9f309-0c38-4a73-aa13-879abbfff008"
}<script src="//www.example.com/addin/fineuploader-4.2.2/iframe.xss.response.js"></script>

失败

HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET,PUT,POST,DELETE,OPTIONS
Access-Control-Allow-Headers: Content-Type, cache-control, x-requested-with
Access-Control-Allow-Credentials: false
Date: Tue, 17 Mar 2015 15:01:43 GMT
Content-Length: 255

{
  "success": false,
  "uuid": "61a4e504-4b89-4b67-ad38-df23d7c4a247",
  "error": "Minimum upload size is 150 KB, \"Winter.jpg\" was 103 KB"
}<script src="//www.example.com/addin/fineuploader-4.2.2/iframe.xss.response.js"></script>

【问题讨论】:

    标签: javascript internet-explorer-8 fine-uploader


    【解决方案1】:

    由于缺少 uuid 参数,未正确解析第一个响应。第二个反应看起来有点奇怪。 “2563”是Fine Uploader在请求中发送的UUID,还是您要分配文件的新UUID?响应中的“uuid”和“newUuid”参数都具有相同的值。根据您响应的请求,此响应中的 UUID 必须与文件的 UUID 匹配。

    目前尚不清楚该问题是否是此处的问题,但具有匹配的“uuid”和“newUuid”表明您的代码中存在问题或您存在误解。

    【讨论】:

    • 2563 是我们正在生成并传回的新 UUID,抱歉应该更清楚。奇怪的是它在当前浏览器中没有任何问题,但会考虑解决这个问题。至于“失败”响应中缺少的 UUID,现在将添加一个,看看是否有区别。
    • 在这种情况下,Fine Uploader 无法解析响应,因为它无法将请求链接到文件。它还不知道 UUID 为“2563”的文件。 UUID 必须始终与文件的实际 UUID 匹配。它适用于现代浏览器,因为现代浏览器中的跨域通信更容易处理,因为它不需要我们使用 iframe 上传文件。您为跨域上传返回的响应仅在 IE9 和更早版本中需要。
    • 刚刚应用了这些更改,它正在工作,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-17
    • 1970-01-01
    • 2014-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多