`

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" class="com.student.action.UpLoadAction1">
   <interceptor-ref name="fileUpload">
    <param name="allowedTypes">
     image/bmp,image/png,image/gif,image/jpeg,image/pjpeg,image/jpg,image/JPG
    </param>
    <param name="maximumSize">1048576</param>
   </interceptor-ref>
   <interceptor-ref name="defaultStack" />
   <result name="success">/success.jsp</result>
   <result name="input">/upload.jsp</result>
  </action>

 

 

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

分享到:
评论

相关推荐

    struts2多文件上传

    Struts2多文件上传是Java Web开发中常见的一项功能,用于允许用户一次上传多个文件。在Struts2框架中,实现这一功能涉及到一系列的技术和步骤。以下是对这一知识点的详细说明: 1. **Struts2框架**:Struts2是一个...

    Struts2多文件上传

    总结来说,Struts2多文件上传涉及到Struts2配置、Action编写、HTML表单设计以及结果处理等多个环节。通过以上步骤,你可以在Struts2应用中实现稳定可靠的多文件上传功能。不过,实际项目中还需要考虑错误处理、安全...

    struts2多文件上传显示进度

    Struts2是一个非常流行的Java Web框架,...总的来说,Struts2多文件上传并显示进度的实现需要结合前端和后端的技术,通过AJAX和XMLHttpRequest的`onprogress`事件来动态更新进度条,同时确保后端处理的高效和安全性。

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    Struts2多文件上传下载实例

    在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...

    struts2多文件上传和下载

    在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件...

    struts2实现多文件上传下载

    文件上传比较多,多文件上传少一点 文件下载很少的,看似简单,实则不然 网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供...

    Ext+Struts2多文件上传

    通过以上步骤,我们可以利用ExtJS的用户界面和Struts2的后台处理能力,实现一个完整的多文件上传功能。这个功能不仅提高了用户体验,还简化了开发流程。在实际项目中,还可以进一步优化,例如添加进度条显示、预览...

    struts2实现多文件上传功能

    Struts2提供了完善的文件上传支持,让我们来详细探讨如何在Struts2中实现多文件上传。 首先,我们需要在Struts2的配置文件(struts.xml)中启用文件上传的支持。这通常涉及到添加`&lt;constant&gt;`标签来设置`struts....

    AjaxFileUpload Struts2 多文件上传

    本篇文章将深入讲解如何利用AjaxFileUpload与Struts2实现多文件上传,并结合jQuery进行前端交互。 首先,我们需要在项目中引入必要的库。Struts2提供了struts2-jquery-plugin,这是一个基于jQuery的插件,包含了...

Global site tag (gtag.js) - Google Analytics