文件上传 commons-fileupload

本文介绍了一个使用Java实现的文件上传示例,包括前端表单设计及后端处理流程。通过commons-fileupload和commons-io库,实现了多文件上传功能,并记录了上传者的姓名和日期。

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

导入两个jarcommons-fileupload.jar,和commons-io.jar


首先是上传页面

fileupload.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>My JSP 'fileUpload.jsp' starting page</title>
  </head>
  
  <body>
<form action="../servlet/FileUpload" method="post" enctype="multipart/form-data">  
<br>  
  文件一:<input type="file" name="file1" /> <br>  
   文件二:<input type="file" name="file2" /> <br>  
  上传者: <input type="text" name="uploader"/> <br>  
      日期: <input type="text" name="date"/> <br>  
        <input type="submit" value="提交"/>  
   
</form>  
  </body>
</html>


传如servlet 处理



public class FileUpload extends HttpServlet {


  private static final long serialVersionUID = 1L;  
  private static final String fileDir = "F:/";  

/**
* Constructor of the object.
*/
public FileUpload() {
super();
}


/**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}


public void doGet(HttpServletRequest request, HttpServletResponse response)
doPost();

}


public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

//设置编码
response.setContentType("text/html");
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

//核心代码
try {  
           DiskFileItemFactory fileFactory = new DiskFileItemFactory();    //产生工厂
           ServletFileUpload fu = new ServletFileUpload(fileFactory);      //调用工具
           fu.setFileSizeMax(30*1024*1024);  //设置文件大小限制


           List fileItems = fu.parseRequest(request);    // 获取请求项
           Iterator iter = fileItems.iterator();  
           String uploader = null;  
           String date = null;  
           List<String> fileNames = new ArrayList<String>();  
           while (iter.hasNext()) {  
               FileItem item = (FileItem) iter.next();  
           
               
               if (!item.isFormField()) { //  判断文件  
                   String oldFileName = item.getName();  
                   String fieldName = item.getFieldName();
                   String content = item.getString();
                   String type = item.getContentType();
                   
                   String newFileName = null;  
                  //  System.out.println("fileName :" +oldFileName +" and fileName : "+ fieldName + "  and content :" + content + " and type "+ type);
                   int delimiter = oldFileName.lastIndexOf("/"); 
                  //  System.out.println(delimiter);
                   
                   if (delimiter == -1)  {
                       newFileName = oldFileName.substring(delimiter + 1);
                       System.out.println(newFileName);
                   }else{ 
                       newFileName = oldFileName; 
                   }
                   if(newFileName != null && !newFileName.trim().equals("")){
                    fileNames.add(newFileName);  
                    item.write(new File(fileDir + "first.txt"));            // 设置写入地址,自己设定
                   }
               } else { // 表单  
                   String fieldName = item.getFieldName();  
                   if ("uploader".equals(fieldName)) {  
                       uploader = item.getString();  
                   } else if ("date".equals(fieldName)) {  
                       date = item.getString();  
                   }  
               }  
               }
            
           System.out.println("forword");
       //     request.setAttribute("fileNames",fileNames);  
       //   request.getRequestDispatcher("../admin/fileUploadResult.jsp").forward(request, response);      // 后续处理
       } catch (Exception e) {  
 
       }  
   }  



/**
* Initialization of the servlet. <br>
*
* @throws ServletException if an error occurs
*/
public void init() throws ServletException {
// Put your code here
}


}

第1个上传组件commons-fileupload =============commons-fileupload ================ common-fileupload组件是apache的一个开源项目之一,可以从http://jakarta.apache.org/commons/fileupload/下载。该组件简单易用,可实现一次上传一个或多个文件,并可限制文件大小。 -下载后解压zip,将commons-fileupload-1.1.1.jar,commons-io-1.2.jar(这里我们用的是更新的版本,但是用法是一样的)复制到tomcat的webapps\你的webapp\WEB-INF\lib\下,如果目录不存在请自建目录。 新建一个servlet: FileUpload.java用于文件上传: package com.drp.util.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.*; import java.util.*; import java.util.regex.*; import java.io.*; import org.apache.commons.fileupload.servlet.*; import org.apache.commons.fileupload.disk.DiskFileItemFactory; public class FileUpload extends HttpServlet { private String uploadPath = ""; // 用于存放上传文件的目录 private File tempPath = new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages\\"); // 用于存放临时文件的目录 public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html; charset=GB18030"); PrintWriter out = res.getWriter(); System.out.println(req.getContentLength()); System.out.println(req.getContentType()); DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory //允许设置内存中存储数据的门限,单位:字节 factory.setSizeThreshold(4096); // the location for saving data that is larger than getSizeThreshold() //如果文件大小大于SizeThreshold,则保存到临时目录 factory.setRepository(new File("D:\\Tomcat 5.5\\webapps\\drp1.2\\tempimages")); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be thrown //最大上传文件,单位:字节 upload.setSizeMax(1000000); try { List fileItems = upload.parseRequest(req); // assume we know there are two files. The first file is a small //
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值