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

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

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

String realPath = ServletActionContext.getRequest().getRealPath("upload");
String savePath = realPath + "/" + uploadFileName;

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

servletContext.getRealPath("upload");
String savePath = realPath + "/" + uploadFileName

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

说明:在eclipse(wtp)开发环境下运行,实际realPath的结果出乎意料,尼玛竟然是这样,虽然不记,但好在这个地址真是web应用的“真实”地址,是好用的,忍了!

D:\JP\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\s2demo\


[b][size=large]2.其他页面如何调用显示保存的图片?[/size][/b]
首先要求图片按步骤1中说的那样,保存在web应用根目录下

<img src="<s:property value="'upload/' + uploadFileName"/>"/>


[b][size=large]3.Struts2配置文件中的struts.multipart.saveDir起什么作用?[/size][/b]
原来初步感觉这个文件夹就服务端保存上传文件的文件夹,不过根本不是这么回事!
这个文件夹只是用来保存上传文件的[color=red]“临时路径”[/color],文件上传完毕后就会从此路径移除。
如果不配置将使用默认的 javax.servlet.context.tempdir 来保存临时文件。
所以这个目录设不设无所谓,尼玛又误导我一次!!!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值