struts2 多文件上载 jquery jquery.form ajax 无刷新

本文介绍如何使用Struts2框架实现多文件上传功能,并通过jQuery进行Ajax支持,实现无刷新上传体验。文章详细展示了struts.xml配置、JSP表单设计及后端Java处理逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

web 开发基于 struts2 相当方便,且也可轻松实现 FileUpload 功能,这里演示了 struts2 在多文件 form 情况下的上载操作


struts.xml action 定义

<action name="doUploadMultfile" class="cn.upload1.UploadAction" method="Upload">
	<result name="success" type="json">
		<param name="root">ActionResult</param>
	</result>
</action>


jquery ajax 支持

<script type="text/javascript" src="script/jquery.min.js"></script>
<script type="text/javascript" src="script/jquery.form.js"></script>


jsp 上载文件的 form

<s:form id="uploadExce2" action="doUploadMultfile" method="POST" enctype="multipart/form-data">
					<s:file label="File (1)" name="upload" />
					<s:file label="File (2)" name="upload" />
					<s:file label="FIle (3)" name="upload" />
					<s:submit cssClass="btn btn-primary" />
				</s:form>
				<script type="text/javascript">
          $('#uploadExce2').ajaxForm({
            dataType : 'json',
            success : function(data)
            {
              // alert(data);
            },
            error : function(data)
            {
              alert('error');
            }
          });
        </script>
注意 file 控件的名字 uload,这是 struts2 的约定名,不能改变。


struts2 uploadfile

package cn.test.upload1;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletContext;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import cn.sharcom.config.ChiliLogin;
import cn.sharcom.config.ChiliProduct;
import cn.sharcom.config.Constant;



public class UploadAction
{

  private File[] uploads;
  private String[] uploadFileNames;
  private String[] uploadContentTypes;

  private String strActionResult;

  public UploadAction()
  {
  }

  public File[] getUpload()
  {
    return this.uploads;
  }

  public void setUpload(File[] upload)
  {
    this.uploads = upload;
  }

  public String[] getUploadFileName()
  {
    return this.uploadFileNames;
  }

  public void setUploadFileName(String[] uploadFileName)
  {
    this.uploadFileNames = uploadFileName;
  }

  public String[] getUploadContentType()
  {
    return this.uploadContentTypes;
  }

  public void setUploadContentType(String[] uploadContentType)
  {
    this.uploadContentTypes = uploadContentType;
  }

  public String Upload()
  {
    ActionContext ac = ActionContext.getContext();
    ServletContext sc = (ServletContext) ac.get(ServletActionContext.SERVLET_CONTEXT);
    // 取一个存文件的目录
    String realpath = sc.getRealPath("/");

    // 获得实际上载文件数量
    int length = uploads.length;

    // 遍歷所有上載的文件
    for (int i = 0; i < length; i++)
    {
      // 文件寫磁盤
      try
      {
        // 新文件名
        String strFileName = NewFilename(i);
        File savefile = new File(new File(realpath), strFileName);
        // 写入
        FileUtils.copyFile(uploads[i], savefile);
      }
      catch (IOException e)
      {
        e.printStackTrace();
      }
    }

    return Action.SUCCESS;
  }

  /**
   * 向 form 返回 action 結果
   * 
   * @return
   */
  public String getActionResult()
  {
    return strActionResult;
  }

  /**
   * 構建一個新的文件名
   * 
   * @return
   */
  private String NewFilename(int index)
  {
    String strResult = null;

    UUID uuid = UUID.randomUUID();
    String str1 = uuid.toString();

    String prefix = uploadFileNames[index].substring(uploadFileNames[index].lastIndexOf("."));

    strResult = str1 + prefix;

    return strResult;
  }

  /**
   * 將文件轉化爲 Base64
   * 
   * @param strFilename
   * @return
   */
  private String ApacheBase64FileToString(final String strFilename)
  {
    String strResult = null;

    try
    {
      // 打开文件
      File file = new File(strFilename);
      // 得到文件 byte
      byte[] byteFile = org.apache.commons.io.FileUtils.readFileToByteArray(file);

      // 开始 base64
      Base64 base64 = new Base64();
      // 得到 base64 byte
      byte[] byteText = base64.encode(byteFile);
      // 转存 string
      strResult = new String(byteText);

      // StringToFile("c:/base64_2.txt", strResult);
      // 设置返回
    }
    catch (IOException e)
    {
      e.printStackTrace();
    }

    return strResult;
  }

}

文本连接 blog.youkuaiyun.com/joyous/article/details/51103064

参考资料 https://struts.apache.org/docs/file-upload.html

Q群讨论 236201801



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值