Internet Explorer 10的精细上传器错误

时间:2013-08-07 13:28:02

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

我在使用Chrome和Firefox的项目中使用Fine Uploader 3.7.0并且工作正常,但是使用Internet Explorer 10文件正确上传但用户总是收到“上传失败”错误消息,即使是演示测试:

<script>
$(document).ready(function() {
     var errorHandler = function(event, id, fileName, reason) {
            qq.log("id: " + id + ", fileName: " + fileName + ", reason: " + reason);
        };

    var myUploader = new qq.FineUploader({
        element: $('#basicUploadButton')[0],
        multiple: false,
        callbacks: {
            onError: errorHandler
        },
        request: {
            endpoint: '/fineupload/receiver'
        }
    });
});
</script>
<div class="fineUploader">
    <span>Please upload your files for automated process.</span>
    <div id="basicUploadButton" class="upload-btn"></div>
</div>
<br />
<div><a href="#" onclick="window.close()">Close Window</a></div> 

我调试了servlet,我发现我发送了这个:

writer.print("{\"success\": true, \"uuid\": \"" + requestParser.getUuid() + "\", \"originalFileName\": \"" + requestParser.getFilename() + "\"}");

所以我认为我应该得到的JSON是正确的。

为什么IE10会失败?我也试过兼容模式,但没有用。

更新:控制台日志:

[FineUploader 3.7.0] Error when attempting to parse xhr response text (SyntaxError: Invalid character) 
 id: blog.jpg, fileName: Upload failure reason unknown, reason: [object XMLHttpRequest]

谢谢!

2 个答案:

答案 0 :(得分:1)

问题是由于我在Java中创建的JSON响应。

查看IE10开发人员工具中的“网络”选项卡(感谢Ray的建议),我得到:

{"error": "java.io.FileNotFoundException: C:\data\uploads\fd9b5240-5661-4f07-a216-7a76b2250b00_C:\folder\blog.jpg (The filename, directory name, or volume label syntax is incorrect)"}

我正在使用

writer.print("{\"success\": true, \"uuid\": \"" + requestParser.getUuid() + "\", \"originalFileName\": \"" + requestParser.getFilename() + "\"}");

而不是那个

JSONObject json = new org.json.JSONObject();
json.put("success", true);
json.put("uuid", requestParser.getUuid());
json.put("originalFileName", requestParser.getFilename());
writer.print(json.toString());

适用于所有浏览器。

无论如何,我需要避免IE10管理的文件名(C:\ folder \ blog.jpg)所以我不得不使用

json.put("originalFileName", getCorrectFileName(requestParser.getFilename()));

使用getCorrectFilename(String s)删除“C:\ folder \”部分。

答案 1 :(得分:0)

“我的文件被发送到服务器但Fine Uploader报告失败”的问题很常见。正如文档所述,您必须在对Fine Uploader的上传POST请求的响应中返回有效的JSON。根据您的评论,您没有返回有效的JSON。要验证您是否返回了有效的JSON,可以使用JSON Lint之类的工具。您可以通过浏览器的开发人员工具检查响应有效内容,也可以在Fine Uploader选项中将debug选项设置为true

正如@mfeltner所说,在构建响应时,您应该在服务器端使用JSON序列化工具。