`

解决SWFUpload上传控件在非IE浏览器下不好用的问题

阅读更多

解决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上传控件demo支持上传,删除图片。兼容ie7+,火狐,谷歌浏览器

    为了实现SwfUpload控件的完整功能,开发者需要将这些组件整合到自己的项目中,配置JavaScript和服务器端代码以处理文件上传的逻辑。这通常涉及设置上传URL、指定文件类型限制、处理文件大小限制、以及添加自定义的...

    大名鼎鼎SWFUpload- Flash+JS 上传

     SWFUpload不同于其他基于Flash构建的上传工具,它有着优雅的代码设计,开发者可以利用XHTML、CSS和JavaScript来随心所欲的定制它在浏览器下的外观;它还提供了一组简明的JavaScript事件,借助它们开发者可以方便的...

    SWFUpload上传实例

    SWFUpload是一款强大的JavaScript上传组件,它通过Flash技术实现了非IE浏览器下的文件上传功能,同时在IE下也能提供良好的用户体验。这个"SWFUpload上传实例"是一个已经调试完毕且可以直接在Myeclipse环境下引用的...

    PHPCMS V9 修改flash上传为H5上传方案 phpcms上传文件statics下js

    3. **PIE.js**:这是一个CSS3渲染引擎,用于解决IE浏览器对某些CSS3属性的不支持,可能用于美化上传按钮的样式。 4. **jquery.ad-gallery.js**:这可能是一个图片画廊插件,虽然不是直接用于文件上传,但可以用于...

    swfupload文件上传

    SWFUpload是一款强大的文件上传组件,尤其在网页前端文件上传领域具有广泛的运用。这款插件以其优秀的用户体验和灵活的功能配置,赢得了开发者的喜爱。在本文中,我们将深入探讨SWFUpload的工作原理、特点以及如何在...

    上传Excel文件支持各浏览器及IE789低版本浏览器

    在非IE浏览器中,HTML5的`&lt;input type="file"&gt;`标签提供了文件选择和上传的功能,配合AJAX可以实现异步上传,用户体验良好。然而,IE7、8、9由于其对HTML5特性的不完全支持,这种方案往往无法直接应用。 首先,要...

    上传文件插件

    2. **The KillersAjax Upload**:这个插件利用XMLHttpRequest(XHR)进行文件上传,显示上传进度,但不适用于IE浏览器。 3. **SWFUpload jQuery Plugin**:基于Flash的上传插件,提供了文件上传和进度显示功能。 4...

    Web应用前端技术的探索与实践

    6.5.2.10 Combo扩展1-去除IE6下穿透层的bug 129 6.5.2.10.1 效果 130 6.5.2.11 Combo扩展2-新样式、可多选 131 6.5.2.11.1 效果 131 6.5.2.12 Combo扩展3-ComboGrid 134 6.5.2.12.1 效果 134 6.5.2.13 Combo扩展4-...

    分享20多个很棒的jQuery 文件上传插件或教程

    该插件基于XMLHttpRequest(XHR)技术,支持多文件上传,并可以显示上传进度,但不支持旧版IE浏览器。 3. Uploadify Uploadify是一款基于jQuery的文件上传插件,它支持单文件或多文件上传,并允许控制并发上传文件的...

Global site tag (gtag.js) - Google Analytics