解决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控件的完整功能,开发者需要将这些组件整合到自己的项目中,配置JavaScript和服务器端代码以处理文件上传的逻辑。这通常涉及设置上传URL、指定文件类型限制、处理文件大小限制、以及添加自定义的...
SWFUpload 是一款流行的JavaScript与Flash结合的上传组件,它在Web应用中提供了一种高效、用户体验友好的文件上传解决方案。2.5版本是该控件的一个重要升级,不仅修复了多个已知的bug,还增加了对多文件上传和大文件...
在网页开发中,文件上传功能是不可或缺的一部分,而SWFUpload就是一款优秀的文件上传控件。它利用Flash技术,提供了多文件上传和进度显示的功能,使得用户在上传大文件或多个文件时能够有更好的交互体验。 ## 一、...
以前一直使用ASP.NET自带的FileUpload控件进行上传文件,发现经常出问题. 尽管在web.config文件中设置了maxRequestLength为很大,但还是不能上传大于2M的文件. 所有后来研究了下上传相关知识, 发现swfupload是一个不错...
SWFUpload 是一款开源的Flash上传控件,它在Web应用程序中被广泛使用,尤其适用于需要处理大量文件上传的场景。这款控件以其强大的功能、良好的用户体验和灵活的自定义选项而受到开发者们的青睐。本篇文章将深入探讨...
PHPCMS V9 修改flash上传为H5上传方案,PHPCMS系统swfupload上传控件更换为基于html5的webuploader组件,Phpcms的上传模块是使用swfupload上传插件,具体写法是在控制器phpcms/modoules/attachemet/attachemts.php...
Struts2和SWFupload是两个在Web开发中常见的组件。Struts2是一个基于MVC设计模式的Java Web框架,而SWFupload则是一个JavaScript库,用于实现Flash的文件上传功能。两者结合使用时,可能会遇到一些冲突问题,主要是...
ExtJs4.0整合Swfupload上传组件是一个常见的前端开发任务,主要涉及到两个技术:Ext Js和Swfupload。这两个工具结合使用,可以为Web应用提供功能强大的文件上传功能,尤其是对于大文件或者多文件上传场景,它们提供...
做项目往往都需要上传文件...但微软自带的上传控件 往往并不能满足我们的需求 以前一直使用 FileUpload ,客户逐渐提出新的需求,迫使不得不改用新的办法 SWFUpload谁然依赖于flash,但在我看来,还是一个不错的选择
由于Flash在浏览器中的广泛支持,Swfupload在过去是实现多文件上传的流行解决方案。在我们的组件中,Swfupload可能是负责实际文件选取和上传的部分,它能处理文件选择事件,将文件数据发送到服务器,并更新进度条...
SWFUpload是一款强大的JavaScript与Flash相结合的文件上传控件,它允许用户在浏览器中实现无刷新的多文件上传,提供丰富的上传进度显示和事件回调功能。这个控件最初由Vinterwebb.se开发,旨在超越传统...
SwfUpload是一款经典的JavaScript与Flash结合的文件上传组件,它允许用户实现多文件上传功能,尤其适用于图片上传。在Web应用中,SwfUpload能够提供一个友好的用户体验,通过Flash技术实现了异步上传,减轻了服务器...
这个组件在Web开发中特别有用,因为它可以提供比传统HTML文件输入控件更丰富的用户体验,尤其是在处理大文件或需要批量上传图片的场景下。 ### 1. 组件组成 SWFUpload 包含两个主要部分:Flash部分和JavaScript...
同时,无刷新上传意味着用户可以在不离开当前页面的情况下完成文件上传,提高了交互性。 在Java后端,我们需要创建一个接收文件上传的Servlet或Controller。当SwfUpload发送文件块时,服务器端需要处理这些请求,将...
SwfUpload 是一款开源的Flash上传组件,它允许在网页中实现多文件上传,并且能够显示上传进度,为用户提供了良好的交互体验。在"完美的SwfUpload 上传,显示进度条"这个项目中,我们主要关注的是如何利用SwfUpload...
SWFUpload是一款强大的上传组件,尤其适用于Web应用程序中实现大文件和批量文件的上传功能。它的v2.2.0版本已经进行了中文汉化,使得国内开发者在使用过程中能够更加方便地理解和操作。这个组件主要依赖Flash技术,...
SwfUpload 是一款开源的Flash上传组件,它允许用户在网页上实现多文件上传功能,尤其适用于需要大文件上传或批量上传的场景。这个技术在Web开发中被广泛应用,因为它可以提供比传统HTML表单上传更好的用户体验。...
SWFUpload是一个开源的JavaScript库,它允许网页在不依赖Flash插件的复杂交互下实现文件上传功能。这个工具在Web开发中尤其有用,因为它提供了一种方式来处理大文件上传,同时支持多文件选择、进度条显示以及预览...
总的来说,"swfupload上传demo示例"提供了一个完整的解决方案,展示了如何在ThinkPHP框架下使用SwfUpload实现多文件上传功能。通过理解SwfUpload的工作原理,结合ThinkPHP的控制器和视图机制,以及恰当的数据库设计...