Struts2文件的上传与下载

  Struts2对文件的上传功能进行了很好的封装,主要用的是fileUpload上传组件。

  下面介绍Struts2的单文件上传:

  首先你的jsp页面定义好一个上传文件的视图:

<s:form action="shop/file_register" method="post" enctype="multipart/form-data">
      file:<s:file name="uploadFile"></s:file><br/>
      <s:submit value="submit"></s:submit>
</s:form>

  然后你对应的Action里面的处理方法应该如下:

  先定义几个成员变量:

private String username;
private File uploadFile;
private String uploadFileFileName;


这里必须提醒的是:类型是String的变量uploadFileFileName,这个变量存储的是上传文件的文件名,这个变量的命名是有规则的,必须是以类型为File的变量名后面加上FileName,最后要生成这三个变量的get和set的方法。

  方法里面应如下去操作:

String path = "H:/File";
try {
	File target = new File(path, uploadFileFileName);
	FileUtils.copyFile(uploadFile, target);	
} catch (IOException e) {
	e.printStackTrace();
}


先是定义一个File,构造它的路径,最后将上传的文件copy到target中,在设置的路径下就可以看到该上传的文件了。

  Struts2多文件上传:

多文件的上传跟单文件是一致的,只需要将上面的变量更改为数组的形式,就可以达到多文件上传的目的了。

private String username;
private File[] uploadFile;
private String[] uploadFileFileName;
	String path = "H:/File";
	try {
		for(int i = 0; i < uploadFile.length; i++) {
			File target = new File(path, uploadFileFileName[i]);
			FileUtils.copyFile(uploadFile[i], target);
		}
			
	} catch (IOException e) {
		e.printStackTrace();
	}
file1:<s:file name="uploadFile"></s:file><br/>
file2:<s:file name="uploadFile"></s:file><br/>
file3:<s:file name="uploadFile"></s:file><br/>

   使用属性驱动的形式上传文件:

类型为File的变量都是直接声明在action中的,如果变量较多,则action中的get和set的方法就显得很臃肿了,所以就使用属性驱动的形式来将属性用javaBean进行封装。

先写一个封装类,将有关File的东西封装起来:

public class FileUploadTools {

	private File uploadFile[];
	private String uploadFileFileName[];
	private String uploadFileContentType[];
	
	public void upload() {
		
		String path = "H:/File";
		try {
			for(int i = 0; i < uploadFile.length; i++) {
				File target = new File(path, uploadFileFileName[i]);
				FileUtils.copyFile(uploadFile[i], target);
			}
			
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public File[] getUploadFile() {
		
		return uploadFile;
	}
	
	public void setUploadFile(File[] uploadFile) {
		
		this.uploadFile = uploadFile;
	}
	
	public String[] getUploadFileFileName() {
		
		return uploadFileFileName;
	}
	
	public void setUploadFileFileName(String[] uploadFileFileName) {
		
		this.uploadFileFileName = uploadFileFileName;
	}
	
	public String[] getUploadFileContentType() {
		
		return uploadFileContentType;
	}
	
	public void setUploadFileContentType(String[] uploadFileContentType) {
		
		this.uploadFileContentType = uploadFileContentType;
	}
}


下面写一个action:

public class File1Action extends ActionSupport{

	private FileUploadTools fileUploadTools;
	
	public String register()  {
		
		fileUploadTools.upload();
		return "register";
	}
	
	public FileUploadTools getFileUploadTools() {
		return fileUploadTools;
	}

	public void setFileUploadTools(FileUploadTools fileUploadTools) {
		this.fileUploadTools = fileUploadTools;
	}
}

jsp的内容如下:

<s:form action="shop/file1_register" method="post" enctype="multipart/form-data">
      <s:file name="fileUploadTools.uploadFile"></s:file><br/>
      <s:file name="fileUploadTools.uploadFile"></s:file><br/>
      <s:file name="fileUploadTools.uploadFile"></s:file><br/>
      <s:submit value="submit"></s:submit>
</s:form>

这样将有关文件上传的东西封装起来的话,很方便,也让我们的action变得简洁起来了。

  Struts2的文件下载:

其实文件下载很简单,就是在给对方一个url地址就行了,但是现在问题是在下载含有中文的文件名的时候,就会出现bug,现在我们介绍一下用Struts2来控制这种不良情况的发生:

首先你要定义一个Action:

public class FileDownloadAction extends ActionSupport{
	
	private String inputPath;
	
	public void setInputPath(String inputPath) {
		
		this.inputPath = inputPath;
	}
	
	public InputStream getFile() {
		
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
	}
}

这里的inputPath是定义一个下载文件的路径,它拥有一个set的方法是设置它的值,getFile方法返回的InputStream是下载文件的流。

下面要配置的是struts.xml:

<action name="download" class="com.xujianguo.action.FileDownloadAction">
  <param name="inputPath">/picture/中文.jpg</param>
  <result name="success" type="stream">
    <param name="contentType">image/jpg</param>
    <param name="inputName">file</param>
    <param name="contentDisposition">filename="中文.jpg"</param>
    <param name="bufferSize">4096</param>
  </result>
</action>

第一个param是设置inputPath的值,contentType是指定下载文件的类型,inputName是指定被下载文件的入口的输入流,也就我们前面那个action中定义的方法,contentDisposition是指定下载的文件名,bufferSize是指定下载文件时候的缓冲大小。

最后就是你的jsp应该怎么写了:

<a href="shop/download">中文.jpg</a>

让href指向download这个action,然后我们前面做的功夫都会一步一步被调用。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值