Struts2 多个文件上传和下载(支持中文文件名)

环境:tomcat5.5+eclipse3.2

首先编写Action:

 

1.上传Action:UploadAction.java

    public class UploadAction extends ActionSupport {

 private List<String> picFileName;// 上传文件名称集合
 private List<File> pic;// 上传文件(临时文件)
 private List<String> picContentType;// 上传的文件的类型集合
 private String savePath;  //"<param name="savePath">/upload</param>"为上传文件的存放路径
 private String allowedTypes;  //获取上传文件允许的路径
 private Long maximumSize;
    private List<Long> fileSize;

 public Long getMaximumSize() {
  return maximumSize;
 }

 public void setMaximumSize(Long maximumSize) {
  this.maximumSize = maximumSize;
 }

 public List<Long> getFileSize() {
  return new ArrayList<Long>();
 }

 public void setFileSize(List<Long> fileSize) {
  this.fileSize = fileSize;
 }

 public String getSavePath() {
  System.out.println("savaPath:"+ServletActionContext.getRequest().getRealPath(savePath));
  return  ServletActionContext.getRequest().getRealPath(savePath);
 }

 public void setSavePath(String savePath) {
  this.savePath = savePath;
 }

 public String getAllowedTypes() {
  return allowedTypes;
 }

 public void setAllowedTypes(String allowedTypes) {
  this.allowedTypes = allowedTypes;
 }

 public List<String> getPicFileName() {
  return picFileName;
 }

 public void setPicFileName(List<String> picFileName) {
  this.picFileName = picFileName;
 }

 public List<File> getPic() {
  return pic;
 }

 public void setPic(List<File> pic) {
  this.pic = pic;
 }

 public List<String> getPicContentType() {
  return picContentType;
 }

 public void setPicContentType(List<String> picContentType) {
  this.picContentType = picContentType;
 }

 /**
  * 过滤文件类型
  */
 public String filterType(String[] types) {
  // 获取上传的文件类型
  List<String> fileType = getPicContentType();
  for (String type : types) {
   for (String fType : fileType) {
    if (type.equals(fType)) {
     return null;
    }
   }
  }
  return "input";
 }

 /**
  * 过滤文件大小
  */
 public String filterSize(List<Long> size){
  for(Long s:getFileSize()){
   if(s>getMaximumSize()){
    return null;
   }
  }
  return "input";
 }
 
 public String execute() throws Exception{

  if (pic == null) {
   this.addFieldError("error", "请选择要上传的文件!");
   return "input";
  } else {
   String filterResult = filterType(getAllowedTypes().split(","));//持有允许上传的文件类型
   // 如果当前类型不允许上传
   if (filterResult != null) {
    this.addFieldError("typeError", "上传的文件类型不正确!");
    return filterResult;
   }
   
   for (int i = 0; i < pic.size(); i++) {
    // 循环上传每个文件
    //查看文件大小
    getFileSize().add(pic.get(i).length());
    String filterSize = filterSize(fileSize);
    if(fileSize!=null){
     this.addFieldError("sizeError", "上传"+picFileName.get(i)+"文件太大!");
     return filterSize;
    }
    uploadFile(i);
   }
  }

  return "success";
 }

 // 实现上传功能
 //Struts2上传文件的默认大小限制是2M(2097152字节),
 //也可以通过struts.properties文件中的struts.multipart.maxSize修改,
 //如struts.multipart.maxSize=102400 表示一次上传文件的总大小不能超过100K字节。
 //另一种改变上传属性的方式是在struts.xml中配置constant。本文采用后者。

 /**
  * 上传多个文件
  */
 private void uploadFile(int i) {
  try {
    /** 用于存放上传文件的路径
        E:/Myspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/F//upload
    */
   FileInputStream file = new FileInputStream(getPic().get(i));
   FileOutputStream newFile = new FileOutputStream(getSavePath() + "//"
     + getPicFileName().get(i));

   BufferedInputStream in = new BufferedInputStream(file);
   BufferedOutputStream out = new BufferedOutputStream(newFile);

   byte[] b = new byte[1024 * 8];
   int n = -1;

   while ((n = in.read(b)) != -1) {
    out.write(b, 0, n);
   }

   in.close();
   out.close();

  } catch (Exception e) {
   e.printStackTrace();
  }

 }

}

2.配置Action:struts.xml

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>

 <!--  指定Action对象的实例化交由Spring完成 -->
 <constant name="struts.objectFactory" value="spring" />
 <!-- 配置Struts2应用的编码集 -->
 <constant name="struts.i18n.encoding" value="GBK"/>
 
 <package name="javahero" extends="struts-default">

  <interceptors>
   <!-- 拦截未登陆的用户 -->
   <interceptor name="loginInterceptor" class="web.interceptor.LoginInterceptor" />
   <!--自定义栈-->
   <interceptor-stack name="default">
    <interceptor-ref name="loginInterceptor" />
    <interceptor-ref name="defaultStack" />
   </interceptor-stack>
  </interceptors>

  <global-results>
   <result name="login" type="redirect">/login.jsp</result>
  </global-results>

    
  <!-- 多个文件上传 -->
  <action name="upload" class="web.action.UploadAction">
   <result name="success">/uploadResult.jsp</result>
   <result name="input">/upload.jsp</result>
   <param name="savePath">/upload</param>
   <!--
    动态配置允许上传的文件类型,多个用 "," 分隔
   -->
   <param name ="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg</param>
   
   <!-- struts2上传文件拦截器 -->
   <interceptor-ref name ="fileUpload" >   
   <!--
    配置允许上传的文件大小,单位字节
   -->
   <param name = "maximumSize" >2302400</param>
   </interceptor-ref >
   <interceptor-ref name = "defaultStack" />
  
  </action>
  
  <!-- 文件下载 -->
   <action name="download" class="web.action.DownloadAction">
    <!-- result类型为“stream”下载 --> 
            <result name="success" type="stream">  
                <!-- 下载文件类型定义 -->  
                <param name="contentType">image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg</param>  
                <!-- 下载文件处理方法 -->  
                <param name="contentDisposition">attachment;filename="${picFileName}"</param>  
                <!-- 下载文件输出流定义 -->  
                <param name="inputName">downloadFile</param>  
                <param name="bufferSize">4096</param>
            </result>  
        </action>  

  
 </package>

 </struts>

 

3.jsp页面:

 

upload.jsp

<%@ page language="java" contentType="text/html; charset=GBK"
 pageEncoding="GBK"%>
<%@taglib uri="/struts-tags" prefix="s"%>

<body>
<center><s:form action="upload.action"
 enctype="multipart/form-data" method="post">
   选择文件:
   <div style="color: red"><s:fielderror /></div>
 <s:file name="pic" />
 <br>

 <s:file name="pic" />
 <br>
 <s:file name="pic" />
 <br>
 <s:file name="pic" />
 <br>
 <s:submit name="submit" value="上传" />
 <s:reset name="reset" value="重置" />
</s:form></center>
</body>

 

download.jsp

 

<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%@taglib uri="/struts-tags" prefix="s" %>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>上传结果</title>
</head>
<body>
<center>
 上传文件:<br>
 <s:iterator id="fileName" value="picFileName" status="fn">
 <s:property/>
 <a href="download.action?picFileName=<s:property value='#fileName'/>">下载</a>  
    <br> 
 </s:iterator>
</center>
</body>

 

 

上传页面:

 

 

上传结果页面:

 

 

下载中文名字文件:

 

 

 2009-11-26 15:00:10

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值