文档章节

Java Web(13)struts2 file upload 临时文件命名问题

Jagery
 Jagery
发布于 2015/12/17 10:10
字数 687
阅读 221
收藏 0

1. strut2 上传文件的功能已经封装好了,只要action类中定义好与表单一致的name的属性就可以轻松获取到上传的文件,

<!-- enctype="multipart/form-data" 是必须的,如果不添加这个属性,便不能正常上传-->
<form action="upload"  method="post" enctype="multipart/form-data" id="excelForm">
	 <div>
		<label for="excelfileupload">&nbsp;选择 Excel 文件上传&nbsp;</label>
		<input type="file" class="form-control" id="excelfileupload" name="excel" >
		
		<button type="submit"  id="fileUploadModalBtn">上传</button>
	 </div>	
</form>

2. 在上面的表单中,在action类中应该是这样定义

public class Upload extends ActionSupport {
    //对应input name=excel
    private File excel ;
    // XFileName 用于接收上传文件的文件名
    private String excelFileName;
    // 文件的类型
    private String excelContentType ;
    
    public String execute(){
        // do something 
        return Action.SUCCESS ; 
        
    }
    
    // setter and getter 
}

3. 在成功接收了上传的文件后,文件会被struts默认保存在一个缓存目录中,缓存的目录可以在struts.properties 中修改

struts.multipart.saveDir= 你自定义目录

 

4. 然后,出现了一个问题,如果是在eclipse的IDE环境中编码测试,我们可以在workspace下的

%eclipse_workspace%\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\

有相应项目目录下找到上传的临时文件,可以发现,上传的文件是*.tmp的,不管是什么文件,一上传就变了*.tmp。如果是上传excel文件 ,然后使用poi来解析,就会出错,因为通过poi的org.apache.poi.ss.usermodel.WorkbookFactory来创建workbook,是抛异常的。必须把文件恢复到相应的文件后缀名。

5. 还一个,在struts 的 Documentation 中就有提及到,要在自己的action中保存好

When a file is uploaded it will typically be stored in a temporary directory. 
Uploaded files should be processed or moved by your Action class to ensure the data is not lost.

6. 问题又来了,如何在action中获取到项目的路径呢,在action中的session已经被封装成了一个Map<String, Object>的对象,只能往里填充数据和获取数据,这时,我们需求struts的一个类来为我们获取到ServletContext,然后就可以getRealPath()了咯。

这个类是 org.apache.struts2.ServletActionContext 可以通过它的静态方法获取到ServletContext的引用。

7.最后 ,就是在相应的目录中使用java.io.File.renameTo()来转存文件,这时需要注意的是,调用了file.renamTo(newFile)后,并不是file就变成了新的File的对象的引用 ,而是参数中的newFile持有转存后的文件的File 引用。而且在引用renameTo返回的是boolean,这时应该判断一下,是否转存成功,不然后面的代码中对newFile的引用就会抛异常FileNotFoundException。

 

 

© 著作权归作者所有

Jagery
粉丝 3
博文 23
码字总数 11583
作品 0
玉林
程序员
私信 提问
struts2文件上传的采用的三种方式解析和上传下载讲解

1.三种方式解析 文件上传几乎是每个项目实现的一个必须的模块。 上传就是将信息从个人计算机(本地计算机)传递到中央计算机(远程计算机)系统上,让网络上的人都能看到。将制作好的网页、文字、...

长平狐
2013/01/06
7.7K
0
The requested resource is not available.

学习Struts2时遇到这个问题。 type Status report message /ch101/index.jsp description The requested resource is not available. 项目名是ch101 WEB—INF中lib目录文件如下: web.xml配置......

zcb炒冰
2013/11/05
7.1K
3
学习File类,并教你写FileUtil

写在前面的话 程序包括代码、数据、文档。在当今,数据对我们来说,尤为重要。或存数据库或写入文件。这样对于File类的学习,就显得十分必要。 编码 1、用什么编码写,就用什么编码读 2、掌握...

Wenyi_Feng
2018/05/15
37
0
Struts2(多)文件上传和下载使用示例

/** * Struts2Test * 使用Struts2上传文件 */ package com.labci.struts2.action; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.u......

arison_919
01/09
0
0
【J2EE系列】JNDI与tomcat连接池

JNDI与tomcat连接池 本章内容 ² JNDI与JNDI服务器 ² 编码实现JNDI目录服务与命名服务 ² 使用Tomcate JNDI服务器 一、JNDI概述 1、什么是JNDI? 英文全称是:Java Naming and Directory Inte...

磊神Ray
2012/02/15
1K
1

没有更多内容

加载失败,请刷新页面

加载更多

SSH安全加强两步走

从 OpenSSH 6.2 开始已经支持 SSH 多因素认证,本文就来讲讲如何在 OpenSSH 下启用该特性。 OpenSSH 6.2 以后的版本多了一个配置项 AuthenticationMethods。该配置项可以让 OpenSSH 同时指定...

xiangyunyan
24分钟前
3
0
C或C++不是C/C++

http://www.voidcn.com/article/p-mucdruqa-ws.html

shzwork
今天
6
0
OSChina 周六乱弹 —— 如何将梳子卖给和尚

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @for_ :划水五分钟,专注两小时。分享Various Artists的单曲《贝多芬第8号钢琴奏鸣曲悲伤的第三乐章》: 《贝多芬第8号钢琴奏鸣曲悲伤的第三乐...

小小编辑
今天
176
8
ES5

什么是ES5:比普通js运行要求更加严格的模式 为什么:js语言本身有很多广受诟病的缺陷 如何:在当前作用域的顶部添加:"use strict" 要求: 1、禁止给未声明的变量赋值 2、静默失败升级为错误...

wytao1995
今天
7
0
c++ 内联函数调用快的原因

见图片分析

天王盖地虎626
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部