问题:
Plupload控件在IE10下运行良好,但在IE9下却不能上传,一点上传按钮,即出现下载对话框。而实际的返回数据为一堆正常的JSON数据。
有网友提过这个问题,他是这么提的:“使用uploader上传插件在往服务器上上传文件成功后返回JSON格式的数据被IE8拦截了,其他浏览器正常”。
确实,乍一看,这个问题提得很准确,IE9怎么把返回JSON数据拦截了,怎么没有进入到AJAX的返回处理过程?
分析:
其实,浏览器是不会有所谓的拦截的,你请求啥,它就返回啥。问题的关键在于plupload的参数设置有误。
在IE10中,plupload使用HTML5进行上传,在IE9中,使用的是flash,而flash文件的指定是通过参数来进行设置的。
var uploader = new plupload.Uploader({ //实例化一个plupload上传对象
browse_button : me._addButton.el,
url : url || 'upload.jsp',
flash_swf_url : 'Moxie.swf',
silverlight_xap_url : 'Moxie.xap',
unique_names: false,
chunk_size: me.chunkSize,
filters:{
mime_types : me.limitType,
max_file_size : me.limitSize, //最大只能上传400kb的文件
prevent_duplicates : true //不允许选取重复文件
},
}
这里的flash_swf_url即为flash文件的地址。
三个问题的原因:
1、出现下载对话框问题
如果flash地址设置不正确,plupload的请求实际上变成了http的直接请求,并未通过AJAX,而返回的恰好是一堆JSON文本,因而出现了下载对话框。
2、无法上传问题
在IE9下plupload依赖 flash控件上传文件,如果该控件都找不到,上传就无从谈起了。
3、文件大小属性缺失问题
在调试过程中,最常见的是监控到file对象没有文件大小属性(size),而正常情况下是有的,因为没有flash控件的支持,因而plupload获取不到该参数。
验证:
通过Filddler对页面请求地址的分析,发现Moxie.swf文件未找到,或地址不正确。
解决:
因此,flash_swf_url参数的正确设置是关键,要保证通过该地址能找到Moxie.swf文件,即地址应为类似“script/plupload/Moxie.swf”,通过该地址能找到Moxie.swf。
同理,也需要正确设置silverligh_xap_url的地址。