关于上传插件uploadify使用问题

来源:互联网 发布:淘宝会员哪几种 编辑:程序博客网 时间:2024/06/10 10:20


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。本身认为这种方法实在不可取。

其他变通方法可使用加密串确定登陆用户,不过如果系统本身对安全性的考虑不甚严格,可以直接将此问题跳过或使用其他上传插件和方法。

 
0 0