我在使用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]
谢谢!
答案 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序列化工具。