读书人

Struts2文件下传路径的详细解释

发布时间: 2012-09-19 13:43:54 作者: rapoo

Struts2文件上传路径的详细解释
Struts2处理文件上传借助 apache commons-fileupload 库实现起来非常容易,但开发过程中关于文件路径的设置有一些疑问,特别是在Eclipse开发环境下,书上讲的不清不楚的,自己研究了以下,有如下结论和大家分享:

1. 在处理文件上传的Action中,如果想把上传文件统一存放在upload目录,应该怎样设置?
错误1:使用相对路径
按习惯保存文件会使用相对路径,即"./upload"或"upload",但经测试,按这种方式写,实际上upload文件加是在eclipse软件根目录下建立的,并未在web工程下建立,这尼玛让我去哪访问,此方法PASS!
错误2:使用旧方法获得绝对路径
按书上的例子,应该使用绝对路径获得web应用的根来保存上传文件


但在最新Servlet-API中,request.getRealPath()方法已经不推荐使用,再网上查替代方法,思路有了,但代码写的比这个还长,这是坑爹呢~
正确方法:使用新方法获得绝对路径
在网上能查到的使用新方法获得绝对路径的方法很多,推荐Struts2开发中设置Action继承ServletContextAware(Action内部即可直接使用ServletContext对象)

代码看起来还算清晰,漂亮!

说明:在eclipse(wtp)开发环境下运行,实际realPath的结果出乎意料,尼玛竟然是这样,虽然不记,但好在这个地址真是web应用的“真实”地址,是好用的,忍了!
<img src="<s:property value="'upload/' + uploadFileName"/>"/>


3.Struts2配置文件中的struts.multipart.saveDir起什么作用?
原来初步感觉这个文件夹就服务端保存上传文件的文件夹,不过根本不是这么回事!
这个文件夹只是用来保存上传文件的“临时路径”,文件上传完毕后就会从此路径移除。
如果不配置将使用默认的 javax.servlet.context.tempdir 来保存临时文件。
所以这个目录设不设无所谓,尼玛又误导我一次!!! 1 楼 hairongtian 2012-06-28 我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事??? 2 楼 lj6684 2012-07-05 hairongtian 写道我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事???
在Eclipse开发环境下,因为使用WTP开发插件,所以Web应用的发布目录是在那个很长的.metadata下,不是在我们平常看的工程下,但一样正常使用没有问题;
当你把工程打包正式发布到真实的Web应用服务器上,脱离了Eclipse环境,上传文件自然就保存在Web应用目录下了,你可以试试 3 楼 fangrenlai 2012-08-11 lj6684 写道hairongtian 写道我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事???
在Eclipse开发环境下,因为使用WTP开发插件,所以Web应用的发布目录是在那个很长的.metadata下,不是在我们平常看的工程下,但一样正常使用没有问题;
当你把工程打包正式发布到真实的Web应用服务器上,脱离了Eclipse环境,上传文件自然就保存在Web应用目录下了,你可以试试


这里截图不行 加我QQ 478586054 我告诉你们怎么弄那个路径

读书人网 >软件架构设计

热点推荐