struts2.5.20上传及下载文件

上传文件

上传文件需要使用的jar包

  • commons-fileupload-1.4.jar
  • commons-io-2.6.jar

文档中看的我自己混乱了,这里给出一种使用文件上传的方法。

单文件上传

(一)我们需要定义一个文件Action类,里面有上传下载方法,其中“属性“的定义需要特别注意,
假设说我们前端表单中上传文件的标签的name值为upload,我们需要把属性定义成

private File upload;			//获取的文件
private String uploadContentType;	//获取的文件的属性
private String uploadFileName;	//获取的文件的名字

然后我们给这些属性加上set方法,这样表单提交后对应属性会被注入相应的值
(二)然后我们需要在配置文件中定义一下Action的路由

<action name="upload" class="lf.blank.action.FileAction" method="upload">
		<!--配置两个拦截器 如果需要对上传文件类型进行限制  只需在拦截器中添加一些参数-->
		<interceptor-ref name="fileUpload"/>	
   		<interceptor-ref name="basicStack"/>
   		<result>/index.jsp</result>
   		<result name="input">/error.jsp</result>
</action>

(三)提交表单

<!-- 表单 -->
<s:form action="/file/upload" method="post" enctype="multipart/form-data">
	<s:file name="upload" label="文件"/>
	<s:submit value="上传"/>
</s:form>

(四)写一下上传函数

/**
* 文件上传
*/
public String upload() {
	//filePath是自己定义的存储文件的目录,你可以自己定义一个成员变量,然后在构造函数中初始化
	File desFile = new File(filePath, uploadFileName);
	try {
		FileUtils.copyFile(upload, desFile);
	} catch (IOException e) {
		e.printStackTrace();
	}
	return SUCCESS;
}

好了!你可以跑一下代码,看看文件是否真的上传到了你想要上传的目录。

多文件上传

多文件上传其实和单文件上传有异曲同工之妙,我们只需把上面的文件相关的成员变量变成数组行变量,然后在表单中使用同name属性的多个input框,接着在上传业务函数中循环调用上传逻辑即可。

修改过的属性

private File[] upload;
private String[] uploadFileName;
private String[] uploadContentType;

其余步骤不再此赘述。
如果上传时显示空指针异常,请检查属性是否有set方法,如果Action内无细节问题,请设置上传文件最大大小,将值设置的大一些。

下载文件

做下载文件业务时,我们应该先来认识一下stream类型的视图,stream视图是专门用来数据传输的,一般用来下载文件,视图中以输入流形式传输数据。
所以下载文件功能需要配置一个stream类型的结果视图。

<action name="download" class="lf.blank.action.FileAction" method="download">
	<result name="download" type="stream">
		<!--设置返回给浏览器的类型 一般这样设置-->
		<param name="contentType">application/octet-stream</param>
		<!--设置下载时显示的文件名-->
		<param name="contentDisposition">attachment;filename=${downloadFileName}</param>
	</result>
</action> 

我们还需要两个属性

private String downloadFileName; //下载的文件的名称,带后缀,用于生成具体文件位置
private InputStream inputStream;	//默认的输入流 这个名称也是需要固定 如果改变需要在流视图中配置

然后完成我们的download方法

public String download() {
	//生成文件具体路径
	File file = new File(filePath, downloadFileName);
	try {
		//获得文件输入流
		inputStream = new FileInputStream(file);
	} catch (FileNotFoundException e) {
		e.printStackTrace();
	}
	//返回流视图
	return "download";
}

为了测试,我在单文件上传页面加了一个最近上传文件显示区,代码是这样的

<!-- 显示一下上一次上传的文件 做下载测试用 -->
<s:url action="/file/download" var="download">
	<s:param name="downloadFileName"><s:property value="#request.uploadFileName"/></s:param>
</s:url>
<p><a href="${download}"><s:property value="#request.uploadFileName"/></a></p>

下载的演示效果
在这里插入图片描述

文末

struts上传文件时如果文件过大,好像会不能上传,鄙人粗浅,尚未有解决办法;
本文仅做各位学习之用,希望能帮助到大家!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值