java上传多个文件

原本打算用struts的FormFile 做同时上传多个文件的解析,实践中才发现FormFile只能处理一个文件的上传操作,不支持同时多个文件上传,真是期待struts能进一步完善这部分功能啊。

以下同样用到struts,直接从ActionForm中获得多个文件,进行解析的。

html:

注意:<form action="*"  mothed="post" enctype="multipart/form-data">的设置

action类:

package test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Hashtable;
import java.util.Iterator;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;

public class UploadFileSampAction extends Action {

 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response) {

  // 获得上传的文件信息
  Hashtable fileh = form.getMultipartRequestHandler().getFileElements();
  String dirPath = getServlet().getServletContext().getRealPath("/")
    + "upload";

  if (fileh != null) {
   // 如果目录不存在,则创建
   File fpath = new File(dirPath);
   if (!fpath.exists()) {
    fpath.mkdir();
   }
   // 解析上传文件
   for (Iterator it = fileh.keySet().iterator(); it.hasNext();) {
    String key = (String) it.next();
    try {
     FormFile formfile = (FormFile) fileh.get(key);
     String filename = formfile.getFileName().trim(); // 文件名
     if (!"".equals(filename)) {

      InputStream ins = formfile.getInputStream();
      OutputStream os = new FileOutputStream(dirPath
        + File.separatorChar + filename);
      System.out.println("=======file dirPath========="
        + dirPath);
      System.out.println("=======file separatorChar========="
        + File.separatorChar);
      System.out.println("=======file filename========="
        + filename);
      int bytesRead = 0;
      byte[] buffer = new byte[8192];
      while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
       os.write(buffer, 0, bytesRead);
      }
      os.close();
      ins.close();

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

  return mapping.findForward("success");
 }
}

struts-config.xml配置:

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

<struts-config>
 <form-beans>
   <form-bean name="uploadFileForm" type="test.UploadFileSample"/>
 </form-beans>
 
  <action-mappings>

  <action    path="/uploadfile"
       type="test.UploadFileSampAction"
       name="uploadFileForm"
       scope="request">
   <forward name="success"    path="/test.html"/>
  </action>

  </action-mappings>


</struts-config>

 

web.xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
   
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
         <init-param>
         <param-name>config</param-name>
         <param-value>
     /WEB-INF/struts-config.xml
    </param-value>
      </init-param>
     <load-on-startup>2</load-on-startup>
    </servlet>

 <servlet-mapping>
     <servlet-name>action</servlet-name>
     <url-pattern>*.do</url-pattern>
 </servlet-mapping>


</web-app>

以上是主要的代码以及配置,最后需要部署到应用服务器上运行试试!!祝大家好运。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现java上传多个文件的方法有多种,以下是一种常用的实现方式: 1. 创建表单:在html页面中创建一个表单,用于上传多个文件。表单中包含一个file类型的input元素,可以通过设置multiple属性来支持上传多个文件。 2. 构建后台处理代码:在java后台中,使用Servlet或者SpringMVC等框架构建上传文件的处理方法。处理方法需要获取表单提交的文件数据,通常使用Apache Commons FileUpload等库来处理文件上传请求。 3. 解析文件数据:在文件上传处理方法中解析表单提交的文件数据,通常使用Apache Commons FileUpload等库来实现。解析后得到的数据是一个FileItem集合,其中每个FileItem表示一个上传文件。 4. 循环处理文件:遍历文件集合,对每个文件进行处理,如保存到服务器、数据库或者其他目的地等。 以下是一个简单的代码示例: HTML页面: ```html <form action="fileUploadServlet" method="post" enctype="multipart/form-data"> <input type="file" name="fileUpload" multiple> <button type="submit">上传文件</button> </form> ``` Java后台处理代码: ```java // 处理文件上传请求 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 创建文件上传处理器 ServletFileUpload upload = new ServletFileUpload(); try { // 解析上传文件数据 List<FileItem> items = upload.parseRequest(request); // 遍历文件集合,对每个文件进行处理 for (FileItem item : items) { // 判断表单项是否为文件上传项 if (!item.isFormField()) { // 获取文件String fileName = item.getName(); // 处理上传文件,如保存到服务器、数据库或者其他目的地等 // ... } } } catch (FileUploadException e) { // 处理文件上传异常 e.printStackTrace(); } } ``` 需要注意的是,上述代码只是一个简单的示例,实际应用中需要根据具体需求进行修改和完善。例如,需要添加文件大小、类型、重复上传等限制,同时为了提高安全性和可靠性,还需要处理文件上传异常和错误情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值