Java 利用 SWFUpload多文件上传 session 为空失效,不能验证的问题
来源:互联网 发布:深圳网络教育报名 编辑:程序博客网 时间:2024/05/01 22:38
原文转自:http://www.tqcto.com/article/code/295299.html
我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的。通过使用某些技术手段,比如jquery form.js可以达到异步上传的目的,但最重要的问题在于,它不能够进行多个文件的上传。如果你要上传多个文件,必须一个一个地上传,同时还要在界面上处理当上传完一个文件之后,下一个文件上传框的问题。
现在我们有了一个更多的运行,即使用swfupload进行多文件异步上传。顾名思义,它是一个flash的上传工具,但在界面上的表现形式使它和普通的html元素一样,没有复杂的展现,就一个普通的上传框,即可达到想要目的。
关于swfupload 编程技术 的使用这里自不必多,这里主要介绍的是解决在java web开发过程中经常碰到的验证失败的问题。这是因为flash在上传的时候使用的是和浏览器不同的会话,flash的SWFUpload上传利用socket套接字进行通信,所以导致session和原来上一次的会话不同,导致session丢失。这样就导致服务器在验证时自然被认为是新会话,从而验证不能通过,导致上传不能成功了。
解决问题的方法,就是让flash在上传文件的时候带上同在一个界面的session标识,这通常是修改其中的upload_url来达到我们的目的,修改如下所示:
upload_url: "/admin/infobuild/image/upload.action;jsessionid=${pageContext.session.id }"
上面这句话,必须放到jsp界面上,因为里面使用到了JavaWeb的语法,当然这可以修改,通过将<%=session.getId()%> 或 ${pageContext.session.id } 放到特殊的js变量中,可以达到隐藏变量的目的。比如如下的代码:
<!-- 这句要房子jsp页面中的script脚本中,或是放在servlet的response.getWriter()流中的script脚本中;总之要在swfupload 的js引入之前执行 -->
window["sessionId"]="${pageContext.session.id}";
<!-- 这句话就可以在引入的js中使用 -->
upload_url: Gtip.util.addContextPath("/admin/infobuild/image/upload.action;jsessionId" + "=" + window["sessionId"]),
以上方案是解决在jsp页面中解决的取值java的变量值;
如上代码的第一句放到jsp文件中,如jsp的公共include文件中。下面一句就放到js文件中,如引入的upload.js文件当中。
但以上代码还存在一个问题,就是默认的sessionName问题。在tomcat或者其它j2ee容器,默认的sessionName也是 jsessionId。如果我们修改了sessionName如通过tomcat的server.xml修改session_cookie_name,这样默认的sessionName就是我们修改之后的了。解决此问题,需要再加一个参数设置才可,如下所示:
<!-- 这三行放在include 导入的那个jsp的页面中 -->
window["contextPath"] = "${pageContext.request.contextPath}";
window["sessionId"] = "${pageContext.session.id}";
window["sessionName"] = "jsessionId";
// js中使用jsp中设置的window的变量值
upload_url: addContextPath("/admin/infobuild/image/upload.action;" + window["sessionName"] + "=" + window["sessionId"])
以上代码的前三行放到公共的include.jsp中,最后一行放到公共的upload.js中。这样即可满足最终要求了。
不过有一点不好的即是,在部署环境中时,如果部署环境修改了sessionName,则必须在此include.jsp中修改一个具体的sessionName才可。
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
- Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题
- Java 利用 SWFUpload多文件上传 session 为空失效,不能验证的问题
- kindeditor+SWFUpload多文件上传session失效解决方法
- struts2文件上传时 上传的文件不能为空
- 解决weblogic下java应用请求session中的验证码为空的问题
- 解决使用FireFox下Flash上传文件时SESSION丢失的问题(swfupload)
- struts2文件上传时,不能为空
- swfupload多文件上传
- swfupload多文件上传控件的使用
- swfupload多文件上传控件的使用
- swfupload多文件上传控件的使用
- IE8 文件上传文件为空的问题
- swfupload上传文件 error-200 session丢失
- 验证不能为空的js
- 用户名不能为空的验证
- uploadify集成struts2上传文件为空的问题
- gdb 远程调试android进程
- 测试插入代码
- CALayer 基础
- 使用Charles对手机app网络包进行分析
- Java字符串反转
- Java 利用 SWFUpload多文件上传 session 为空失效,不能验证的问题
- jQuery-使用jQuery进行Dom操作
- 【BLE】CC2541之发现多个特征值句柄
- 1094. The Largest Generation (25)
- 在android中批量执行sqlite的sql脚本
- kali linux 升级至2.0
- IOC容器之灵活配置对象属性值一
- CloudantDB创建view(In fact,it is the secondary Indexes)
- PHP heredoc技术