Struts2 框架总结(七) :文件上传

Struts无论是基于注解还是配置文件都可以实现,这里使用注解方式开发,struts有封装好的文件上传对象,需要引入两个jar包

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

文件上传struts限制大小是2MB,如果超过2MB就会抛出异常,解决的方法是在struts.xml配置文件添加上

<struts>

<constant name="struts.multipart.maxSize " value="52428800"></constant>

</struts>

限制大小是50MB,value的单位是byte

单文件上传

html界面:

form 表单的属性如果要上传文件一定要加上enctype="multipart/form-data"

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="upload/singleUpload" method="post" enctype="multipart/form-data">
		<label>选择文件:</label> 
		<input type="file" name="ff"><br>	
		<input type="submit" value="上传"/>
	</form>
</body>
</html>

Action:

这两个属性很重要

private File ff;//要与前台的name一致

private String ffFileName;//name+FileName是文件的名字

package sdibt.fly.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

@Namespace("/upload")
@ParentPackage("struts-default")
public class UploadAction {

	private File ff;//要与前台的name一致
	
	private String ffFileName;//name+FileName是文件的名字
	
	public File getFf() {
		return ff;
	}

	public void setFf(File ff) {
		this.ff = ff;
	}
	public String getFfFileName() {
		return ffFileName;
	}

	public void setFfFileName(String ffFileName) {
		this.ffFileName = ffFileName;
	}

	@Action(value="singleUpload",results={@Result(name="success",location="/upload_success.html")})
	
	public String singleUpload() throws IOException{
		//拿到文件,将文件存储在C盘,使用IO流输出到D盘
		//拿到输入流
		FileInputStream in = new FileInputStream(ff);
		//输出流 输出到D盘
		FileOutputStream out = new FileOutputStream(new File("d:\\"+ffFileName));
		
		byte[] b = new byte[1024];
		int len=0;
		//不断写入文件
		while((len=in.read(b))!=-1){
			out.write(b, 0, len);
		}
		out.close();
		in.close();	
		return "success";
	}	
}

Struts提供了一个io包,里面的FileUtils类可以直接完成对文件的赋值

	@Action(value="singleUpload",results={@Result(name="success",location="/upload_success.html")})
	
	public String singleUpload() throws IOException{
		//拿到文件,将文件存储在C盘,使用FileUtils输出到D盘
		//第一个参数是要拷贝的文件,第二个是目标文件
		FileUtils.copyFile(ff, new File("d:\\"+ffFileName));	
		return "success";
	}
	

多文件上传:

前台界面只不过再添加几个input框,name的属性要一致

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="upload/singleUpload" method="post" enctype="multipart/form-data">
		<label>选择文件:</label> 
		<input type="file" name="ff" ><br>	
		<input type="file" name="ff" ><br>	
		<input type="file" name="ff" ><br>	
		<input type="submit" value="上传"/>
	</form>
</body>
</html>

Action收到的参数就会是一个File数组和一个fileName数组

package sdibt.fly.action;

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;

@Namespace("/upload")
@ParentPackage("struts-default")
public class UploadAction {

	private File[] ff;//要与前台的name一致
	
	private String[] ffFileName;//name+FileName是文件的名字
	

	public File[] getFf() {
		return ff;
	}


	public void setFf(File[] ff) {
		this.ff = ff;
	}


	public String[] getFfFileName() {
		return ffFileName;
	}


	public void setFfFileName(String[] ffFileName) {
		this.ffFileName = ffFileName;
	}

	@Action(value="multiUpload",results={@Result(name="success",location="/upload_success.html")})
	
	public String multiUpload() throws IOException{
		//拿到文件,将文件存储在C盘,使用FileUtils输出到D盘
		
		//循环调用copyFile方法
		for (int i=0; i<ff.length; i++) {
			FileUtils.copyFile(ff[i], new File("d:\\"+ffFileName[i]));
		}	
		return "success";
	}
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值