您的位置:首页 > 其它

关于上传插件uploadify使用问题

2015-02-10 15:30 344 查看
uploadify上传插件官网例子为PHP,但是java使用同样无碍。

主要使用文件为js,css,swf,以及一个uploadify-cancel.png的图片,使用时的常用参数设置为:

<span style="white-space:pre">	</span><input type="file" name="file_upload" id="file_upload_1" />
<pre name="code" class="javascript">	$("#file_upload_1").uploadify({
"auto":true,	//自动上传
"height" : 20,
"fileObjName" : "imgFile",	//文件上传对象的名称
"swf" : "${ctx}/uploadify/uploadify.swf",	//uploadify.swf 文件的相对路径。
"uploader" : "${ctx}/bgAdmin/breed/upload",	//后台处理程序的相对路径。
"width" : 100,
"multi":false,	//设置为true时可以上传多个文件。
"buttonImage": "${ctx}/uploadify/browse-btn.png",	//浏览按钮的图片的路径 。
"fileTypeDesc" : "Image Files",	//这个属性值必须设置fileTypeExts属性后才有效,用来设置选择文件对话框中的提示文本
<span style="white-space:pre">	</span>"fileTypeExts" : "*.gif; *.jpg; *.png",	//设置可以选择的文件的类型
<span style="white-space:pre">	</span>"buttonText":"请选择文件",	//浏览按钮的文本。
"onUploadComplete" : function(file) {	//每个文件上传完毕后无论成功与否都会触发。
<span style="white-space:pre">		</span>//alert("Flash was not detected."+file.name);
<span style="white-space:pre">	</span>},
<span style="white-space:pre">	</span>"onUploadSuccess" : function(file,data,response){	//当文件上传成功时触发
<span style="white-space:pre">	</span>var obj = jQuery.parseJSON(data);
<span style="white-space:pre">	</span>if(obj.error == "0"){
<span style="white-space:pre">	</span>$("#breedImg").attr("src","${ctx}/"+obj.url);
<span style="white-space:pre">	</span>$("#breedImgHidden").val(obj.url);
<span style="white-space:pre">	</span>}
<span style="white-space:pre">	</span>}
});




uploadify插件使用时注意事项(主要针对3.2,3.1版本,其他版本未测试)

1.uploadify 3.1 /3.2进入页面请求两次问题解决办法。

最近在做MVC项目的时候有用到 uploadify,但是在进入页面的时候会有请求两次的问题,明显为js方法初始化时部分参数未设置或js代码本身BUG

具体解决方法是(js文件中,原因为settings.upload_url未设置,但是文件中并未对未设置的情况进行处理):

this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url = SWFUpload.completeURL(this.settings.button_image_url)

改为

this.settings.upload_url = SWFUpload.completeURL(this.settings.upload_url);this.settings.button_image_url = this.settings.button_image_url ? SWFUpload.completeURL(this.settings.button_image_url) : this.settings.button_image_url
2.uploadify在谷歌浏览器上总会崩溃的解决方法
在使用测试时,发现在谷歌浏览器测试总是会出现页面崩溃。

解决的办法是: 给引入的js加上一个参数,时间戳就可以,防止缓存,使每一次都请求。(这个问题是因为谷歌浏览器会缓存文件导致的)

<script type="text/javascript" src="../common/uploadify/jquery.uploadify.js?f=<%=System.currentTimeMillis()%>"></script>

网上还有这些:

根据stackoverflow上的帖子,

Asp.Net Web From
<script src="/Resources/uploadify/jquery.uploadify3.1Fixed.js?ver=<%=(new Random()).Next(0, 99999).ToString() %>" type="text/javascript"></script>


Asp.Net MVC
<script type="text/javascript" src=@Url.Content("~/Content/uploadify/jquery.uploadify3.1Fixed.js?ver=")@DateTime.Now.Ticks></script>


PHP
<script src="js/jquery.uploadify.min.js?ver=<?php echo rand(0,9999);?>" type="text/javascript"></script>


3.火狐浏览其中使用uploadify时的session丢失

使用过程中,因为牵扯权限控制,使用uploadify上传时经过了拦截器取得session,发现该session与当前页面访问的session并不是同一个,原因是sessionId发生了改变,这样导致在session中无法取得用户信息。

其解决办法在网上也找了良久,大部分的回答是在参数中添加sessionID,但是这种方法不仅有严重的安全隐患,而且由于使用java web开发,自从servlet1.2以后就不在支持sessionContext.getsessionId这样的方法了,想要在代码中根据sessionid取得session,必须手动编写添加session监听,过程也稍显麻烦。官网中对这个情况也有解释,由于官网使用PHP的例子,所用方法也是使用上述类似方法,使用sessionid来获得session。本身认为这种方法实在不可取。

其他变通方法可使用加密串确定登陆用户,不过如果系统本身对安全性的考虑不甚严格,可以直接将此问题跳过或使用其他上传插件和方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: