读书人

strut2 多文件下传

发布时间: 2012-09-27 11:11:17 作者: rapoo

strut2 多文件上传

参照上一篇博文《strut2 文件上传》,多文件上传只需要将属性类型改为数组类型或者list类型即可

?

用来上传的web页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
??? pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
?
?? <s:form action="multipleUpload.action" method="post" enctype="multipart/form-data">
?????? <s:file label="图片一" name="myFile" ></s:file>
?????? <s:file label="图片二" name="myFile" ></s:file>
?????? <s:file label="图片三" name="myFile" ></s:file>
?????? <s:file label="图片四" name="myFile" ></s:file>
?????? <s:file label="图片五" name="myFile" ></s:file>
?????? <s:submit value="提交" />
?? </s:form>
?
</body>
</html>

?

处理的Action:

package com.student.action;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Random;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class MultipleUpLoadAction extends ActionSupport {
?private static final int BUFFER_SIZE = 2 * 1024;
?private File[] myFile;
?private String[] myFileFileName;
?private String[] myFileContentType;

?public File[] getMyFile() {
??return myFile;
?}

?public void setMyFile(File[] myFile) {
??this.myFile = myFile;
?}

?public String[] getMyFileFileName() {
??return myFileFileName;
?}

?public void setMyFileFileName(String[] myFileFileName) {
??this.myFileFileName = myFileFileName;
?}

?public String[] getMyFileContentType() {
??return myFileContentType;
?}

?public void setMyFileContentType(String[] myFileContentType) {
??this.myFileContentType = myFileContentType;
?}

?public String execute() throws Exception {
??//原文件
??????? File[] src = getMyFile();
??????? //目标地址
??????? String dstPath = ServletActionContext.getServletContext().getRealPath("/")+"/images";
??????? //循环存放原文件
??????? for(int i=0;i<src.length;i++){
??????? ?//给源文件重新名称
??????? ?String imageFileName = getImageFileName(getMyFileFileName()[i]);
??????? ?ServletActionContext.getRequest().setAttribute("imageFileName"+(i+1), imageFileName);
?????????//声明目标文件
??????? ?File dst = new File(dstPath+"/"+imageFileName);
??????? ?//将源文件拷贝到目标地
??????? ?copy(src[i], dst);
??????? }
??return SUCCESS;
?}

?//将指定的文件拷贝到指定的目录
?public static void copy(File src,File dst){
??InputStream in = null;
??OutputStream out = null;
??try {
???in = new BufferedInputStream(new FileInputStream(src),BUFFER_SIZE);
???out = new BufferedOutputStream(new FileOutputStream(dst),BUFFER_SIZE);
???byte[] b = new byte[1024];
???int len = 0;
???while((len = in.read(b))!= -1){
????out.write(b, 0, len);
???}
??} catch (FileNotFoundException e) {
???e.printStackTrace();
??} catch (IOException e) {
???e.printStackTrace();
??}finally{
??? try {
????if(null!=in){
???????? in.close();
???? }
???? if(null!=out) {
???????? out.close();
???? }
???} catch (IOException e) {
????e.printStackTrace();
???}
??}
?}
?
?//根据当前时间给文件取指定的名字
?public static String getImageFileName(String fileName){
??Random rnd = new Random();
??int rn = rnd.nextInt(1000);
??return new Date().getTime()+ rn + getExtention(fileName);
?}
?
?//获取文件的后缀
?public static String getExtention(String fileName){
??int pos = fileName.lastIndexOf(".");
??return fileName.substring(pos);
?}

}


成功后返回的页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
??? pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
?? <div style="padding: 3px; border: solid 1px #cccccc; text-align: center">
??? <img src="images/${imageFileName1}" />
??? <br/>
?????? <img src="images/${imageFileName2}" />
??? <br/>
?????? <img src="images/${imageFileName3}" />
??? <br/>
?????? <img src="images/${imageFileName4}" />
??? <br/>
?????? <img src="images/${imageFileName5}" />
?? </div>
</body>
</html>

?

配置Action的文件:

<action name="upload" />
???<result name="success">/success.jsp</result>
???<result name="input">/upload.jsp</result>
??</action>

?

?

来自:http://blog.sina.com.cn/s/blog_6145ed810100eb98.html

读书人网 >软件架构设计

热点推荐