`
lj6684
  • 浏览: 955884 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

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

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

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

但在最新Servlet-API中,request.getRealPath()方法已经不推荐使用,再网上查替代方法,思路有了,但代码写的比这个还长,这是坑爹呢~
正确方法:使用新方法获得绝对路径
在网上能查到的使用新方法获得绝对路径的方法很多,推荐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\


2.其他页面如何调用显示保存的图片?
首先要求图片按步骤1中说的那样,保存在web应用根目录下
<img src="<s:property value="'upload/' + uploadFileName"/>"/>


3.Struts2配置文件中的struts.multipart.saveDir起什么作用?
原来初步感觉这个文件夹就服务端保存上传文件的文件夹,不过根本不是这么回事!
这个文件夹只是用来保存上传文件的“临时路径”,文件上传完毕后就会从此路径移除。
如果不配置将使用默认的 javax.servlet.context.tempdir 来保存临时文件。
所以这个目录设不设无所谓,尼玛又误导我一次!!!
分享到:
评论
6 楼 u013192969 2014-04-24  
       
5 楼 lotnhiro 2013-05-06  
请问 如果路径有空格 怎么办??
4 楼 heirenhua 2013-01-10  
我靠,深有同感呀!!!尼玛今天折腾这个折腾了一天!!!

到最后自己打印路径,然后打开这个路径才看到上传好的文件!

话说保存在这么长的一个路径下,也太麻烦了,可能是用Eclipse的缘故,晚上直接在Tomcat目录下手写一个测试测试!
3 楼 fangrenlai 2012-08-11  
lj6684 写道
hairongtian 写道
我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事???

在Eclipse开发环境下,因为使用WTP开发插件,所以Web应用的发布目录是在那个很长的.metadata下,不是在我们平常看的工程下,但一样正常使用没有问题;
当你把工程打包正式发布到真实的Web应用服务器上,脱离了Eclipse环境,上传文件自然就保存在Web应用目录下了,你可以试试



这里截图不行 加我QQ  478586054  我告诉你们怎么弄那个路径
2 楼 lj6684 2012-07-05  
hairongtian 写道
我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事???

在Eclipse开发环境下,因为使用WTP开发插件,所以Web应用的发布目录是在那个很长的.metadata下,不是在我们平常看的工程下,但一样正常使用没有问题;
当你把工程打包正式发布到真实的Web应用服务器上,脱离了Eclipse环境,上传文件自然就保存在Web应用目录下了,你可以试试
1 楼 hairongtian 2012-06-28  
我的错误和你一摸一样,可是我还是没有解决,还是保存在那个.metadata下,怎么回事???

相关推荐

    struts2实现多文件上传下载

    2.能够对上传路径进行配置文件指定(upload.properties),使用了一些类似单例模式的静态代码块 3.Struts2进行下载处理,能对上传的所有文件进行下载(多个) 4.文件保存的名称UUID生成,不过显示并下载的名称都是原...

    struts实现文件上传功能

    能够指定路径,指定文件类型上传到服务器或本机

    struts 2文件上传

    一个struts 2实现文件上传实例,上传文件类型、大小、路径都在 xml里面配置。

    uploadify3与struts2结合实现有进度条文件上传实例

    这是根据uploadify3 2结合struts2搭建的文件上传环境 可以直接导入eclipse运行 每步实现基本都加了注释 以下是我碰到的问题: 1 判断session是否失效 本实例没测试这个问题 但在工作项目中碰到了 但原因在这里...

    struts_框架文件上传文件-Eclipse

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助。在此谢谢各位!...

    Struts2上传文件出错

    -- 系统常量定义,定义上传文件临时存放路径 --&gt; &lt;constant name="struts.multipart.saveDir" value="D:\\upload\\"&gt; &lt;!-- Action所在包定义 --&gt; &lt;package name="C04.4" extends="struts-default"&gt; &...

    struts2 文件上传实例

    一个struts 2实现文件上传实例,上传文件类型、大小、路径都xml里面配置。

    struts2上传文件

    struts2上传文件存路径到数据库,知道读数据库 下载到本地。

    struts1的文件上传

    文件上传、多文件上传,文件名 乱码,上传文件名的重名都在此工程中有具体的解决 此工程中为了上传容易,删除了jar包,要使的工程运行,只要加入struts-1.2.9的jar包就可以了

    struts2文件上传,与struts2-xml校验

    struts2文件上传,与xml校验 struts2文件校验可通过xml配对action的名称去校验属性的值。例如UploadAction.java中有一个book的属性。那么我可以定义一个UploadAction-validation.xml去校验这个book属性的内容。 xml的...

    Struts2属性文件详解

    该属性指定Struts 2文件上传中整个请求内容允许的最大字节数. struts.custom.properties 该属性指定Struts 2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖struts.properties文件中指定的属性....

    Struts实现文件上传

    用Struts1.2实现文件上传功能,并且把文件保存在javaweb project的虚拟路径下。利用fileForm 类型上传二进制文件格式和字符串格式数据。

    struts2的实现文件上传的例子

    这是一个完整的上传例子,用的mysql数据库,数据库中存储上传的路径,数据库中只有一个id(主键),和一个其他字段,

    ajax_struts2_上传与下载_无刷新

    4. 批量导入数据采用的是导入test文件夹下的测试压缩包upload.rar上传到服务器的临时目录,然后利用WinRar.exe对其进行解压,解压后对指定文件名的Excel文件进行解析,然后对每条记录所配置的文件路径进行比对然后...

    eclipse下利用struts2实现文件的上传和下载

    可以单文件或多文件上传和下载,如需要改变上传路径例如上传到本地磁盘(D:\)下只需稍加修改即可,再次非常感谢大虾李顺利。

    Struts实现文件上传下载

    Struts实现的文件上传下载,是保存在服务器上的 不是数据库,希望看清楚再下 省的浪费各位的分,由于时间有限,没有对数据库操作,上传后文件放在服务器里项目的根目录下的upload里,可以新建张表,把文件名称和路径...

    struts2.0 文件上传示例

    该案例是基于struts2.0 来上传图片的案例,可以轻松的限制图片的类型,大小路径,如果有不明白的地方可以844818108@qq.com

    ssh2多文件的上传与下载

    Struts2+hibernate+spring实现多文件的上传与下载功能,主要包括:上传、下载、删除 1.能够对多个文件进行上传(可以选择上传文件个数,也即...文件上传是运用了Ajax技术对上传文件校验,判断数据库中是否存在该文件

    Struts2VulsTools-Struts2系列漏洞检查工具

    优化部分EXP在部分情况下被WAF拦截的问题,提高检测成功率,优化自定义上传路径exp,文件所在目录不存在时自动创建目录,防止文件因为目录不存在,导致上传失败。 2018-08-24: 增加S2-057 Struts 2.3 to 2.3.34,...

    基于Struts2.3的多文件批量上传/下载

    基于当前最新版本Struts2.3的多文件批量上传与下载,直接上传到服务器路径下,未涉及数据库操作。对上传的文件类型进行过滤

Global site tag (gtag.js) - Google Analytics