Struts2(12):Struts2的上传下载续

使用Struts2结束common的fileupload和io两个包进行上传下载开发

 

首先编写upload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib  prefix="s" uri="/struts-tags"%>
<html>
  <body>
	   <s:form action="upload" theme="simple" enctype="multipart/form-data">
	  	<table align="center" width="40%">
		    <tr>
		    	<td>username:</td>
		    	<td><s:textfield name="username"></s:textfield></td>
		    </tr>
		    <tr>
		    	<td>password:</td>
		    	<td><s:password name="password"></s:password></td>
		    </tr>
		    <tr>
		    	<td>file:</td>
		    	<td><s:file name="file"></s:file></td>
		    </tr>
		    <tr>
		    	<td><s:submit></s:submit></td>
		    	<td><s:reset></s:reset></td>
		    </tr>
	    </table>
	  </s:form>
  </body>
</html>

 

配置struts.xml文件

<constant name="struts.i18n.encoding" value="gbk"></constant> <!--将struts2的默认编码改为gbk -->
<constant name="struts.multipart.saveDir" value="c:\\"></constant>
<action name="upload" class="com.test.action.UploadAction">
	<result name="success">/uploadResult.jsp</result>
</action>

 UploadAction.java,上传的文件会放入WebRoot/upload目录下

package com.test.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	private String username;
	private String password;
	private File file;
	//下面两个变量是文件名与文件类型,Struts2会自动为以下两变量赋值
	private String fileFileName;
	private String fileContentType;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public File getFile() {
		return file;
	}
	public void setFile(File file) {
		this.file = file;
	}
	public String getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(String fileFileName) {
		this.fileFileName = fileFileName;
	}
	public String getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(String fileContentType) {
		this.fileContentType = fileContentType;
	}
	
	public String execute() throws Exception {
		//所谓文件上传,其实就是一个输入输出的操作,从一个输入流写到一个输出流。
		InputStream is = new FileInputStream(file);
		String root = ServletActionContext.getRequest().getRealPath("upload");
		File destFile = new File(root,this.getFileFileName());
		OutputStream os = new FileOutputStream(destFile);
		byte[] buffer = new byte[400];
		int length = 0;
		while((length= is.read(buffer)) > 0){
			os.write(buffer, 0, length);
		}
		is.close();
		os.close();
		return SUCCESS;
	}
}

 

uploadResult.jsp得到返回的结果

<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
  <body>
  	username:<s:property value="username"/><br>
  	password:<s:property value="password"/><br>
  	file:<s:property value="fileFileName"/>
  </body>
</html>

 如何上传指定个数的文件?如同时上传3个,则需要修改action类,使用集合类来支持

package com.test.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
	private String username;
	private String password;
	private List<File> file;
	//下面两个变量是文件名与文件类型,Struts2会自动为以下两变量赋值
	private List<String> fileFileName;
	private List<String> fileContentType;
	
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public List<File> getFile() {
		return file;
	}
	public void setFile(List<File> file) {
		this.file = file;
	}
	public List<String> getFileFileName() {
		return fileFileName;
	}
	public void setFileFileName(List<String> fileFileName) {
		this.fileFileName = fileFileName;
	}
	public List<String> getFileContentType() {
		return fileContentType;
	}
	public void setFileContentType(List<String> fileContentType) {
		this.fileContentType = fileContentType;
	}
	public String execute() throws Exception {
		for(int i = 0;i < file.size(); i++){
			InputStream is = new FileInputStream(file.get(i));
			String root = ServletActionContext.getRequest().getRealPath("upload");
			File destFile = new File(root,this.getFileFileName().get(i));
			OutputStream os = new FileOutputStream(destFile);
			byte[] buffer = new byte[400];
			int length = 0;
			while((length= is.read(buffer)) > 0){
				os.write(buffer, 0, length);
			}
			is.close();
			os.close();
		}
		return SUCCESS;
	}
}

 

你可能感兴趣的:(java,apache,jsp,struts,OS)