关于jfinal 文件上传,jsessionid 的问题

jelly_oy 发布于 2015/02/14 17:17
阅读 1K+
收藏 0

@JFinal 你好,想跟你请教个问题:

各位大侠,最近在用jfinal做文件上传,遇到棘手的问题,描述如下:

我们一般会使用 swfupload 或者 jquery uploadify之类的控件做文件上传,

火狐浏览器下,经常容易出现 jsessionid 丢失的情况,

所以我在freemarker页面,文件上传的URL路径加上jsessionid ,比如:

'uploader' : '${ctx}/uploadify?jsessionid=${session.id}',

当然前提是,我使用了SessionInViewInterceptor拦截器,才将session传递到freemarker页面上的。

可是,当我点击上传,提交文件时,我的全局SessionHandle 却获得不到session,
也就是说  request.getSession(false) 得到的是 null值

下面我把SessionHandle的代码贴出来
----------------------------------------------------------------------------------------------
public void handle(String target, HttpServletRequest request,HttpServletResponse response, boolean[] isHandled) {        
        SessionKit.set(request.getSession(false));    
        nextHandler.handle(target, request, response, isHandled);
    }
----------------------------------------------------------------------------------------------

我很纳闷,jsessionid 的值,我已经能够在freemarker页面获得到,

但是如何让它继续传递到提交文件的Controller呢? 


'uploader' : '${ctx}/uploadify?jsessionid=${session.id}',
是我哪里写错了,还是用的方法不对? 希望大侠帮帮小弟了,非常感谢!

加载中
0
白痴糊涂人
白痴糊涂人
'uploader' : '${ctx}/uploadify?jsessionid=${session.id}'
应该是
'uploader' : '${ctx}/uploadify;jsessionid=${session.id}'
0
jelly_oy
jelly_oy

引用来自“白痴糊涂人”的评论

'uploader' : '${ctx}/uploadify?jsessionid=${session.id}'
应该是
'uploader' : '${ctx}/uploadify;jsessionid=${session.id}'

'uploader' : '${ctx}/uploadify;jsessionid=${session.id}'

问号改成分号,这种方法我也试了的,也不行,报错,说找不到action

大侠们,这是为什么呢?


jelly_oy
jelly_oy
回复 @白痴糊涂人 : 试了下使用相对路径,还是不行哦,真是奇怪! 我给项目加了一个全局登录验证拦截器, 但是负责文件上传的controller必须使用ClearInterceptor清除掉才能成功上传,在火狐上使用uploadify容易丢失sessionid, 现在只能这么做了,将文件上传controller排除在登录验证拦截器之外。
白痴糊涂人
白痴糊涂人
试一下不用绝对路径,用相对路径 我是这样用的 uploader:'fileUpload/file;jsessionid=${sessionId!}',
0
双_双
双_双
mark  之前也遇到过uploadify上传session丢失的问题
0
ArrayListt
ArrayListt

session的原理其实就是cookis。

那么你的session丢失,应该就是cookie丢失。

那么你现在可以

1.通过浏览器的debug插件看看你在上传的时候,一个名叫JSessionID的cookie有没有被提上去。

2.'uploader' : '${ctx}/uploadify?jsessionid=${session.id}'你这句代码应该是吧session作为参数传递给uploadify,那么你需要在controller通过参数jsessionid作为sessionid然后在去获取session。


你试试呢。

0
jelly_oy
jelly_oy
好的,谢谢各位大侠的指导,我先试试,后续再给出实验结果哈!
0
jelly_oy
jelly_oy
谢谢各位的指导和回复,使用uploadify上传文件,不知道为什么总是碰到莫名其妙的问题,
也不知道是不是uploadify上传控件本身存在着固有的缺陷,这个我后续会采用别的上传组件进行试验的。

下面说下我的目前的做法:

为了控制项目必须登录才能访问controller,我给项目加了一个全局登录验证拦截器,
在火狐上使用uploadify上传文件,容易丢失sessionid,
现在只能将文件上传的controller使用ClearInterceptor排除在登录验证拦截器之外,才能成功上传文件。

也就是说,我现在文件是可以成功上传的,但是文件上传的controller是排除在登录验证拦截器之外的。
U
Undefinesdfsdgsg
我也是,查了半天说这个插件容易丢失session,开始采用url重写的方式在请求的url后面追加;jsessionid=' + 你的session,后来发现url被误读了,加了个handler,(见http://www.oschina.net/question/109135_158365),控制器是进入了,但是火狐下还是不行,只能采取拦截器排除登录的办法,解决了
双_双
双_双
我之前也是采用的这个办法,把上传的请求排除掉
返回顶部
顶部