java积累——apache commons fileupload 实现文件上传

简介: java积累——apache commons fileupload 实现文件上传

引言


之前在做.net项目的时候经常会遇到文件上传和下载的需求,现在在java中同样有了这样的需求,其实做法和.net差不多都是采用了第三方的东西来实现,今天就利用apache commons fileupload来实现文件的上传。


jar包引入


1、commons-fileupload-1.1.1.jar需要引入


2、commons-io-1.2.jar需要引入


html页面代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>index.html</title>
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="this is my page">
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
  </head>
  <body>
    <form action="./servlet/item/FileUploadServlet" method="post"
      enctype="multipart/form-data" name="form1">
      <input type="file" name="file">
      <input type="submit" name="Submit" value="upload">
    </form>
    <form action="./servlet/HelloWord" method="post">
      <input type="submit" />
    </form>
    <form name="uploadform" method="POST" action="./servlet/item/FileUploadServlet"
      ENCTYPE="multipart/form-data">
      <table border="1" width="450" cellpadding="4" cellspacing="2"
        bordercolor="#9BD7FF">
        <tr>
          <td width="100%" colspan="2">
            文件1:
            <input name="x" size="40" type="file">
          </td>
        </tr>
        <tr>
          <td width="100%" colspan="2">
            文件2:
            <input name="y" size="40" type="file">
          </td>
        </tr>
        <tr>
          <td width="100%" colspan="2">
            文件3:
            <input name="z" size="40" type="file">
          </td>
        </tr>
      </table>
      <br />
      <br />
      <table>
        <tr>
          <td align="center">
            <input name="upload" type="submit" value="开始上传" />
          </td>
        </tr>
      </table>
    </form>
  </body>
</html>

在html页面中我们需要注意的地方就是 form表单的头部的设置,提交方式必须为post提交,表单编码方式必须为:enctype="multipart/form-data"。这样我们在servlet中才能接收道文件的相关信息完成上传。


创建一个servlet实现逻辑


package com.bjpowernode.drp.basedata.web;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class FileUploadServlet extends HttpServlet {
   private ItemManager itemManager; 
  // 用于存放上传文件的目录
  private File uploadPath;
  private File tempPath;
  public void doPost(HttpServletRequest req, HttpServletResponse res)
      throws ServletException, IOException {
    // form提交采用multipart/form-data,无法采用req.getParameter()取得数据
    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()
    factory.setRepository(tempPath);
    ServletFileUpload upload = new ServletFileUpload(factory);
    // maximum size before a FileUploadException will be thrown
    upload.setSizeMax(1000000 * 20);
    try {
      List fileItems = upload.parseRequest(req);
      String itemNo = "";
      for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
        FileItem item = (FileItem) iter.next();
        // 是普通的表单输入域
        if (item.isFormField()) {
          if ("itemNo".equals(item.getFieldName())) {
            itemNo = item.getString();
          }
        }
        // 是否为input="type"输入域
        if (!item.isFormField()) {
          String fileName = item.getName();
          long size = item.getSize();
          if ((fileName == null || fileName.equals("")) && size == 0) {
            continue;
          }
          // 截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG
          fileName = fileName.substring(
              fileName.lastIndexOf("\\") + 1, fileName.length());
          // item.write(new File(uploadPath + itemNo + ".gif"));
          item.write(new File(uploadPath, fileName));
          itemManager.uploadItemImage(itemNo, fileName);
        }
      }
      res.sendRedirect(req.getContextPath()
          + "/servlet/item/SearchItemServlet");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
  public void init() throws ServletException {
    uploadPath = new File(getServletContext().getRealPath("upload"));
    // 如果目录不存在
    if (!uploadPath.exists()) {
      // 创建目录
      uploadPath.mkdir();
    }
    // 临时目录
    tempPath = new File(getServletContext().getRealPath("temp"));
    if (!tempPath.exists()) {
      tempPath.mkdir();
    }
     itemManager = new ItemManagerImpl();
  }
}


我们将获取到的文件的名称(包括文件的后缀)存储在数据库中的一个字段中,这样我们在图片预览的时候会根据数据库返回的名称来实现图片的显示。


我们上传的文件存储在G:\myeclipseWorkSpace\apache-tomcat-7.0.63\webapps\drp2.0\upload,当然apache-tomcat-7.0.63之前的路径根据项目存放的位置不同而改变。


总结


上面代码就可以粗略的完成了一个文件上传的功能了,当时实现方式有很多,这只是其中的一种,希望有别的更好的实现的读者可以共享。

目录
相关文章
|
23天前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
37 9
|
1月前
|
缓存 前端开发 Java
在Java项目中实现高性能的文件上传下载
在Java项目中实现高性能的文件上传下载
|
1月前
|
前端开发 安全 Java
如何在Java中实现高效率的文件上传和下载
如何在Java中实现高效率的文件上传和下载
|
2月前
|
消息中间件 存储 Java
深度探索:使用Apache Kafka构建高效Java消息队列处理系统
【6月更文挑战第30天】Apache Kafka是分布式消息系统,用于高吞吐量的发布订阅。在Java中,开发者使用Kafka的客户端库创建生产者和消费者。生产者发送序列化消息到主题,消费者通过订阅和跟踪偏移量消费消息。Kafka以持久化、容灾和顺序写入优化I/O。Java示例代码展示了如何创建并发送/接收消息。通过分区、消费者组和压缩等策略,Kafka在高并发场景下可被优化。
92 1
|
2月前
|
Java 数据库连接 Apache
深入理解Apache Commons Pool2池化技术
深入理解Apache Commons Pool2池化技术
|
2月前
|
Java 应用服务中间件 Apache
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
安装和配置Apache Tomcat是部署Java Web应用程序的常见任务
87 7
|
2月前
|
监控 Java 数据库连接
Java一分钟之-JDBC连接池:HikariCP, Apache DBCP, C3P0
【6月更文挑战第14天】本文介绍了Java中常用的三种JDBC连接池——HikariCP、Apache DBCP和C3P0。HikariCP以其高性能和低延迟领先,适合高并发环境;Apache DBCP稳定易配置;C3P0则提供高度可定制选项。文章讨论了各连接池的常见问题及避免策略,如配置不当、连接泄露等,并给出示例代码以供参考。选择合适的连接池并正确配置能有效提升应用性能。
50 7
|
1月前
|
easyexcel Java Apache
EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
EasyExcel导入的时候报错Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/File
106 0
|
1月前
|
缓存 安全 Java
使用Java实现高性能的文件上传下载服务
使用Java实现高性能的文件上传下载服务
|
1月前
|
Java 应用服务中间件 API
如何安装与使用Java EE 8、Servlet 3.0及Apache Maven进行高效开发
【7月更文第1天】搭建高效Java EE 8开发环境,包括安装JDK、选择WildFly或Payara Server作为应用服务器,以及安装Apache Maven。使用Maven创建Servlet 3.0 Web项目,编写 HelloWorldServlet,打包部署到服务器,通过访问特定URL测试应用。这一流程助力开发者实现快速原型和大型项目开发。
67 0

推荐镜像

更多