Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题-阿里云开发者社区

开发者社区> 嗯哼9925> 正文

Java 利用SWFUpload多文件上传 session 为空失效,不能验证的问题

简介:
+关注继续查看

    我们都知道普通的文件上传是通过表单进行文件上传的,还不能达到异步上传的目的。通过使用某些技术手段,比如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才可。






本文转自hoojo博客园博客,原文链接:http://www.cnblogs.com/hoojo/archive/2012/05/11/2495991.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
php移动文件的函数 move_uploaded_file()和copy
最近遇到的问题就是:用户提交一个图片,我这边给缩放成三种格式的大小,缩放的方法存在,所以我这边直接就调用三次,结果只有一张图片上传,采用循环调用的方法还是只有一个图片,后来发现 提交文件的时候有一个移动函数 move_uploaded_file(),这个函数虽然多次调用但是只能执行一次,原因就在于...
566 0
Maven项目中无法找到 xml文件或 properties文件等配置文件的解决方法
在初次使用 Maven 项目的时候总是会遇到一些比较奇异的问题 就比如说总是会报错:项目里的 **.xml 或 **.properties 配置文件无法找到 这时你去项目中的 classes 生成文件(target 或 out)中找,确实这些配置文件没有被编译 这是因为 ...
1366 0
LoadRunner上传及下载文件
(1)LoadRunner上传文件            web_submit_data("importStudent.do",                    "Action=https://testserver/console/importStudent.
666 0
sqlplus无法启动的问题及解决
今天性能测试部门的同事问我一个问题,说他跑一个shell脚本调用sqlplus 结果报错 Error 6 initializing SQL*Plus SP2-0667: Message file sp1.msb not found SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 我记得自己之前碰到过类似的问题,也是sqlplus启动不了。
827 0
.net网站建设页面提交后css失效的问题
问题描述:.net网站建设在提交后出现css部分失效,如div位置,字体大小。问题解决:原因是,过去的提示语句我们一律使用了Response.write("alert("***")"),用了.write输出 js脚本.alert等破坏了css 加载。
871 0
去除Notepad++打开文件后文字下面出现红色波浪线的问题
Notepad++新升级了之后就有自动判断的红线出现,例如:单词拼错了就给提示。 也有时候我们一打开Notepad++就会看到满眼的红色波浪线,很是不爽,今天就手把手教大家如何去除文章中下面的红色波浪线。
1644 0
解决Emacs无法输入中文的问题
版权声明:转载请联系本人,感谢配合!本站地址:http://blog.csdn.net/nomasp https://blog.csdn.net/NoMasp/article/details/52138501 根据Fcitx的介绍:当LC_CTYPE为英文时,在Emacs上可能无法使用输入法。
777 0
+关注
4364
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载