jQuery插件uploadify使用注意事项
最近因为项目需要上传文件,所以折腾了一下文件上传的插件,因为涉及到跨域,所以一开始便打算使用iframe或flash的,但是用iframe的话有个不好获取页面中的数据,所以决定使用flash。最后选定uploadify这个插件。
一、使用uploadify插件如何设置跨域上传:
1、首先要将scriptAccess参数设置为always;
2、将uploadify.swf文件放置在上传页面的服务器上;
(注意:这里文件放置的地址不是指文件存储的目标服务器,而是指和html文件所在的服务器,这个官网上的faq里面好像写错了,就因为这个折腾了我好长时间……)。
3、将一个名为crossdomain.xml的XML文件保存在文件要存储的机器上(目标机器)。
crossdomain.xml文件的内容如下:
<?xml version=”1.0″?>
<!DOCTYPE cross-domain-policy SYSTEM “http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd”>
<cross-domain-policy>
<allow-access-from domain=”*” />
</cross-domain-policy>
二、使用uploadify如何在上传文件时附加动态数据:
1、自动上传时动态设置参数,需将methon参数设置 为:‘methon’:‘get’;
2、获取动态数据时网上基本有2种方法:
①一种是在点上传前先调用uploadifySettings函数,再上传,这种方法有个不好的地方就是自动上传时无法获取到动态数据:
<a href=”javascript:$(‘#uploadify’).uploadifySettings(‘scriptData’,{‘folederid’:folderId}); jQuery(‘#uploadify’).uploadifyUpload()”>开始上传</a>
②还有一种方法更为优雅,而且也没有自动上传时无法获取数据的问题。这种方法是重写onSelect方法:
‘onSelect’ : function (event, queueID, fileObj) {
$(“#uploadify”).uploadifySettings(‘scriptData’,{‘folederid’:folderId});
}
});
如有多个数据可以用’,'分隔开来。
3、然后在可以在接收端利用$_GET['folderid']获取数据了。
三、其他注意的地方:
1、提示错误”Security Error” #2049的原因是:
(1)可能是apache配置问题,获取不到crossdomain.xml。
(2)当script参数中含有中文时也会有前面的提示,后来同事发现是只要有“%”符号就不行。
解决办法:将中文部分双重编码即可解决该问题。
如:var strUrl = encodeURI(encodeURI(“中文测试”));
2、IE下没有显示,果然是没有安装flash,好像这个要求9.0以上版本的flash。折腾好久……如果引用的文件都能访问,而不显示按钮,可能是没有安装flash,使用该插件要求9.0以上版本的flash。
3、遇到问题先分别访问crossdomain.xml、uploadify.swf、及其他引入的js文件。确保这些文件都能被访问到,且位置没有放错。
如遇404错误 可以先看看是不是接收文件的控制器的地址没有写对……