Plupload控件在IE9下不能上传、文件尺寸为空、出现下载对话框问题解决

时间:2022-08-28 09:49:11

问题:

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的地址。