`
lj6684
  • 浏览: 965200 次
  • 性别: 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实现文件上传下载

    首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List&lt;FileInfo&gt;`类型的字段,用于接收上传的文件...

    struts2文件上传jar

    这个压缩包包含了实现Struts2文件上传所需的全部jar包,这些库文件对于理解和实现文件上传功能至关重要。 首先,我们要了解Struts2文件上传的基本流程。当用户通过表单提交包含文件输入字段的请求时,Struts2框架会...

    struts2文件上传实例

    1. **.struts2配置**:在Struts2框架中,需要在`struts.xml`配置文件中添加相应的action配置,声明文件上传的处理方法。通常,你需要设置`&lt;result&gt;`类型为`stream`,以便处理上传的文件。 2. **Action类**:创建一...

    struts2 文件上传

    Struts2 文件上传是Web开发中的一个重要功能,它允许用户通过网页上传文件到服务器。Struts2 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,提供了丰富的特性和强大的控制层功能,使得文件上传...

    struts2文件上传和下载

    在Struts2中,文件上传和下载是常见的功能需求,对于用户交互和数据交换至关重要。以下是对这些知识点的详细阐述: 1. **文件上传**: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它是一个Apache提供...

    Struts2之struts2文件上传详解案例struts011

    在这个"Struts2之struts2文件上传详解案例struts011"中,我们将深入探讨如何实现这一功能。 首先,我们需要了解Struts2中的Action类,它是处理用户请求的核心组件。为了支持文件上传,我们需要创建一个继承自`org....

    简单易懂的struts2文件上传

    在Struts2中,文件上传功能是一个常见的需求,例如用户可能需要上传图片、文档或其他类型的文件。本教程将深入浅出地讲解如何在Struts2中实现文件上传,并提供一个简单的实例来帮助理解。 1. **Struts2文件上传概述...

    struts2文件上传下载

    在Struts2框架中实现文件上传和下载功能,是Web开发中常见的需求。Struts2作为一个成熟的MVC框架,提供了简单的API和标记库来处理文件上传下载的业务逻辑。下面是基于给定文件内容的知识点详细说明。 ### Struts2...

    struts实现文件上传功能

    一、Struts2文件上传的基本原理 文件上传功能主要依赖于Java Servlet API中的Part接口,以及Apache Commons FileUpload库。Struts2通过拦截器机制,在请求处理阶段捕获上传的文件并将其存储到服务器的指定路径。它...

    struts2文件上传源码和步骤

    在 Struts2 中,文件上传功能是通过特定的拦截器(`FileUploadInterceptor`)来实现的。以下是对标题和描述中所述知识点的详细解释: 1. **文件上传原理**: 文件上传的本质是客户端浏览器将本地文件以二进制流的...

    struts2 文件上传 测试通过版

    本文将详细讲解如何在Struts2中实现文件上传功能,并探讨相关知识点。 1. **Struts2 Action类配置**: 在Struts2中,我们需要创建一个Action类来处理用户请求。文件上传时,Action类通常会包含一个或多个`java.io....

    Struts2文件上传与下载

    Struts2是一个强大的Java web框架,它为开发者提供了丰富的功能,包括处理用户表单提交、进行文件上传和下载。在Web应用中,文件上传和下载是常见的需求,例如用户上传头像、下载文档等。Struts2通过其Action类和...

    swfuplaod+struts2实现多文件上传

    下面将详细介绍如何利用SWFUpload与Struts2来实现多文件上传。 **一、SWFUpload组件介绍** SWFUpload 是一个JavaScript库,它利用Flash技术提供了一个高级的文件上传体验。它的主要特性包括: 1. **多文件选择**...

    struts2文件上传与下载

    下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们需要在`struts.xml`配置文件中添加相关的拦截器,以便Struts2能够处理文件上传请求。通常,我们会使用`...

    Struts2文件上传下载和表单重复提交问题

    文件上传功能在Struts2中通过`Struts2`提供的插件来实现,主要依赖于`Apache Commons FileUpload`库。首先,要在`struts.xml`配置文件中启用文件上传支持,设置`struts.multipart.parser`为`jakarta`或`native2...

    struts2文件上传

    以下是对Struts2文件上传进行详细解释的知识点: 1. **Struts2文件上传原理**: - Struts2使用Apache的Commons FileUpload库来处理文件上传。这个库解析HTTP请求中的multipart/form-data内容,将每个文件作为单独...

    struts2文件上传下载实例

    在“struts2文件上传下载实例”中,我们将探讨如何在Struts2框架下实现文件的上传和下载功能,这对于许多Web应用程序来说是必不可少的特性。 首先,`pom.xml`文件是Maven项目对象模型的配置文件,它定义了项目的...

    struts2框架下的文件上传

    本文将详细讲解Struts2框架下三种不同的文件上传方式:copy模式、字节流上传和字符流上传。 1. Copy模式文件上传: Copy模式是Struts2提供的一种简单易用的文件上传方式。它通过Struts2的`FileUploadInterceptor`...

    通过Servlet文件上传理解Struts2文件上传原理(附源码)

    在本文中,我们将深入探讨如何使用Servlet来理解Struts2中的文件上传原理。Servlet是Java Web应用程序中的一个组件,用于处理HTTP请求和响应。而Struts2是一个基于MVC(模型-视图-控制器)设计模式的开源Web应用框架...

    struts2 实现文件批量上传

    1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...

Global site tag (gtag.js) - Google Analytics