解决SWFUpload上传控件在非IE浏览器下不好用的问题,主要是两点:一点是请求路径,一点是网上说的session的问题。
第一:路径问题
SWFUploa控件的upload_url必须是绝对路径。
如我的项目链接为:http://127.0.0.1:8080/TestWeb,进行文件上传的servlet为uploadServlet,那么upload_url就必须为:http://127.0.0.1:8080/TestWeb/uploadServlet
若只是写upload_url:uploadServlet,IE(IE11没试过)能用,非IE的(如谷歌、火狐、360)都是404。
第二:sessionid丢失的问题
这个问题如果后台不需要session验证其实也不是什么问题,但是要验证呢就是个问题了。
这个问题谷歌不明显,路径问题解决了谷歌浏览器还是可以上传的。
火狐彻底不行,原因就是网上说:sessionid丢失了。
所以只需要在文件上传时把sessionid带过来再通过sessionid把原来的session找回来问题就解决了。具体解决如下:
第一步、建立一个全局map用来存放session:
public class MySessionContext { private static MySessionContext instance; private HashMap mymap; private MySessionContext() { mymap = new HashMap(); } public static MySessionContext getInstance() { if (instance == null) instance = new MySessionContext(); return instance; } public synchronized void AddSession(HttpSession session) { if (session != null) mymap.put(session.getId(), session); } public synchronized void DelSession(HttpSession session) { if (session != null)mymap.remove(session.getId()); } public synchronized HttpSession getSession(String session_id) { if (session_id == null) return null; return (HttpSession) mymap.get(session_id); } }
第二步、建一个session监听器,当session创建和销毁的时候map中随之添加删除session:
public class MySessionListener implements HttpSessionListener{ private MySessionContext myc=MySessionContext.getInstance(); public void sessionCreated(HttpSessionEvent arg0) { myc.AddSession(arg0.getSession()); } public void sessionDestroyed(HttpSessionEvent arg0) { myc.DelSession(arg0.getSession()); } }
在web.xml中注册这个监听器:
<listener> <display-name>MySessionListener</display-name> <listener-class>com.wjl.MySessionListener</listener-class> </listener>
第三步、在文件上传路径中把sessionid传过来:
var sessionid = '<%=session.getId()%>'; var serverURL='<%=basePath%>'; upload_url: serverURL+'uploadServlet?jsessionid='+sessionid
第四步、在后台需要验证session的时候重新生成session:
Object userInfo = request.getSession().getAttribute("userInfo"); if (userInfo == null){ String sessionID = request.getParameter("jsessionid"); if(sessionID!=null && sessionID.trim().length()>0 && (!sessionID.trim().equalsIgnoreCase("null"))){//说明session有传值 HttpSession sess = MySessionContext.getInstance().getSession(sessionID); userInfo = sess.getAttribute("userInfo"); if(userInfo==null){ throw new Exception("用户信息获取失败:userInfo=null"); } } }
这样子之后,用户验证就通过了,自然也就不会空指针,也就能上传文件啦。
相关推荐
swfupload 使用时会有ie兼容性问题。将这个js拷贝覆盖则能解决ie9ie10下面不能加载上传组件的兼容性问题。
swfupload上传控件2.5版本,修复多个bug,支持多文件上传,大文件上传,可控制上传文件数目。
以前一直使用ASP.NET自带的FileUpload控件进行上传文件,发现经常出问题. 尽管在web.config文件中设置了maxRequestLength为很大,但还是不能上传大于2M的文件. 所有后来研究了下上传相关知识, 发现swfupload是一个不错...
PHPCMS V9 修改flash上传为H5上传方案,PHPCMS系统swfupload上传控件更换为基于html5的webuploader组件,Phpcms的上传模块是使用swfupload上传插件,具体写法是在控制器phpcms/modoules/attachemet/attachemts.php...
swfupload上传图片控件,支持删除。兼容浏览器ie7+,火狐,谷歌。上传界面类似QQ空间发表说说界面。
做项目往往都需要上传文件...但微软自带的上传控件 往往并不能满足我们的需求 以前一直使用 FileUpload ,客户逐渐提出新的需求,迫使不得不改用新的办法 SWFUpload谁然依赖于flash,但在我看来,还是一个不错的选择
SwfUpload上传控件,编写一个样例,用java上传大文件,无缝刷新 上传大文件的效果,非常不错
SWFUpload上传组件,中文汉化版,很好用,可以学习下
相当不错的上传控件,只是多文件上传和进度显示
2 将随机名称与源文件名称写入数据库(解决中文文件名写入硬盘乱码的问题) 3 sql.sql 是测试用的表 作用:将文件名在本地命名如:[凤姐.jpg]上传,在选择文件时不会因为文件是中文而产生乱码(因为中文文件名实际上...
jquery+SWFUpload+COS上传组件的使用 jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件的使用jquery+SWFUpload+COS上传组件...
swfupload控件实现flash文件上传。详尽的参数介绍等!
SWFUpload上传组件的一个完整的例子,后台由Struts2完成,有上传进度显示,可以多文件上传,如果你想使用SWFUpload组件但还不知道怎样使用,可以下载下来运行一下试试,看一下源码就知道了。
swfupload多文件上传实例,相当好用
swfUpload上传文件图片(多图片); 导入myeclipse直接运行即可;可扩展;
swfupload多图片上传PHP多图上传组件FLASH+JS,SWF+JS文件+实例,非常使用的上传组件,带参数说明
SWFUpload多附件上传组件源码,SWFUpload多附件上传组件源码
swfupload 异步上传文件,支持进度条上传
swfupload多文件上传带进度条实例,vs2012开发,net4.0框架,可上传多个文件,上传类型、上传大小、上传数量可控,已测试成功!
SWFUPLOAD上传组件.可以直接运行