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之前的路径根据项目存放的位置不同而改变。


总结


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

目录
相关文章
|
1月前
|
Java
java引入本地 MultipartFile 实现多部分文件上传
在Java中,`MultipartFile`通常用于处理通过HTML表单上传的文件。但在某些情况下,需要直接从本地文件系统获取文件并上传。本文介绍如何创建一个实现了`MultipartFile`接口的本地类`LocalMultipartFile`,将本地文件转换为`MultipartFile`对象,简化文件上传流程。此方法适用于批量上传等场景,避免了表单上传的复杂性。代码示例展示了如何实现和使用该类进行文件上传操作。作者:华科云商小彭。链接:[稀土掘金](https://juejin.cn/post/7377559533785530431)。
105 18
|
6月前
|
IDE Java 分布式数据库
Apache HBase 落地JAVA 实战
Apache HBase 落地 Java 实战主要涉及使用 Java API 来操作 HBase 数据库,包括表的创建、删除、数据的插入、查询等操作。以下是一个基于 Java 的 HBase 实战指南,包括关键步骤和示例代码。
330 23
|
5月前
|
分布式计算 Java 大数据
大数据-147 Apache Kudu 常用 Java API 增删改查
大数据-147 Apache Kudu 常用 Java API 增删改查
74 1
|
5月前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
1874 2
|
5月前
|
Java
java 文件上传和下载
java 文件上传和下载
36 0
|
5月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
406 0
|
7月前
|
消息中间件 Java Kafka
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
【Azure 事件中心】在微软云中国区 (Mooncake) 上实验以Apache Kafka协议方式发送/接受Event Hubs消息 (Java版)
171 1
|
7月前
|
Java 持续交付 项目管理
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。
Maven是一款基于Apache许可的项目管理和构建自动化工具,在Java开发中极为流行。它采用项目对象模型(POM)来描述项目,简化构建流程。Maven提供依赖管理、标准构建生命周期、插件扩展等功能,支持多模块项目及版本控制。在Java Web开发中,Maven能够自动生成项目结构、管理依赖、自动化构建流程并运行多种插件任务,如代码质量检查和单元测试。遵循Maven的最佳实践,结合持续集成工具,可以显著提升开发效率和项目质量。
79 1
|
8月前
|
Java
java 文件上传 :MultipartFile 类型转换为file类型
java 文件上传 :MultipartFile 类型转换为file类型
234 9
|
7月前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
76 0

推荐镜像

更多