JavaEE组件commons-fileupload实现文件上传、下载

yizhihongxing

下面详细讲解如何使用JavaEE组件commons-fileupload实现文件上传、下载的完整攻略:

准备工作

首先,需要在项目中引入commons-fileupload组件,可以通过Maven进行引入。在项目的pom.xml文件中添加以下依赖项即可:

<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.4</version>
</dependency>

文件上传的实现

1. 使用表单实现文件上传

在前端代码中,需要添加一个文件上传的表单,并将enctype属性设置为“multipart/form-data”。例如:

<form action="/uploadFile" method="post" enctype="multipart/form-data">
   <input type="file" name="file" />
   <input type="submit" value="Upload" />
</form>

在后台代码中,需要创建一个Servlet来处理文件上传请求。以下是处理上传请求的Servlet代码示例:

@WebServlet("/uploadFile")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {

   private static final String SAVE_DIR = "uploadFiles";

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

       String appPath = request.getServletContext().getRealPath("/");
       String savePath = appPath + File.separator + SAVE_DIR;

       File fileSaveDir = new File(savePath);
       if (!fileSaveDir.exists()) {
           fileSaveDir.mkdir();
       }

       String fileName = "";
       Part part = request.getPart("file");
       if (part != null) {
           fileName = new File(part.getSubmittedFileName()).getName();
           part.write(savePath + File.separator + fileName);
       }

       response.getWriter().append("File uploaded successfully.");
   }

}

2. 使用Ajax实现文件上传

在前端代码中,可以使用Ajax进行文件上传,使用FormData来将文件以二进制流的方式发送到服务器上。

function uploadFile(file) {
   var formData = new FormData();
   formData.append("file", file);

   var xhr = new XMLHttpRequest();
   xhr.open("POST", "/uploadFile");
   xhr.send(formData);
}

在服务器端的处理方式与使用表单实现文件上传是相同的。

文件下载的实现

在服务器端,下载文件的实现可以通过设置响应的ContentType和Content-Disposition头来实现。以下是一个文件下载的Servlet代码示例:

@WebServlet("/downloadFile")
public class FileDownloadServlet extends HttpServlet {

   private static final String SAVE_DIR = "uploadFiles";

   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

       String fileName = request.getParameter("fileName");
       if (fileName == null || fileName.equals("")) {
           response.getWriter().append("Please provide file name.");
           return;
       }

       String appPath = request.getServletContext().getRealPath("/");
       String savePath = appPath + File.separator + SAVE_DIR + File.separator + fileName;
       File file = new File(savePath);

       if (!file.exists()) {
           response.getWriter().append("File not found.");
           return;
       }

       String mimeType = getServletContext().getMimeType(savePath);
       if (mimeType == null) {
           mimeType = "application/octet-stream";
       }

       response.setContentType(mimeType);
       response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
       response.setContentLength((int) file.length());

       FileInputStream in = new FileInputStream(file);
       OutputStream out = response.getOutputStream();

       byte[] buffer = new byte[1024];
       int length;
       while ((length = in.read(buffer)) > 0) {
           out.write(buffer, 0, length);
       }

       in.close();
       out.flush();

   }
}

使用以上Servlet代码,可以通过get请求下载对应的文件,传递的参数为fileName。

以上就是使用JavaEE组件commons-fileupload实现文件上传、下载的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaEE组件commons-fileupload实现文件上传、下载 - Python技术站

(0)
上一篇 2023年6月16日
下一篇 2023年6月16日

相关文章

  • jsp实现剪子石头布小游戏

    实现一个剪子石头布小游戏的完整攻略需要以下几个步骤: 创建一个JSP网页,用于显示游戏界面,用户可以进行游戏选择和游戏操作。 在JSP网页中使用HTML和CSS,创建游戏界面。可以使用Canvas或HTML DOM创建游戏操作界面。 在JSP网页中,使用JavaScript编写游戏逻辑。游戏逻辑包括用户输入判断、计算得分、更新游戏状态等。 将JSP网页和游戏…

    Java 2023年6月15日
    00
  • Java如何找出数组中重复的数字

    要找出Java数组中的重复数字,可能有以下几种方法: 方法一:暴力方法 这个方法虽然简单易懂,但其时间复杂度也比较高,不过对于小型数组来说还是可以接受的。 简单来说就是遍历整个数组,对于每一个数字,都依次遍历后面的数字,如果发现该数字已经出现过,那么就把它输出出来即可。 这个方法的Java代码示例如下: public void findDuplicate(i…

    Java 2023年5月19日
    00
  • Java各种排序算法汇总(冒泡,选择,归并,希尔及堆排序等)

    Java各种排序算法汇总 本文将详细讲解Java中常见的各种排序算法,包括冒泡排序、选择排序、归并排序、希尔排序、堆排序等,以及他们的实现代码和时间复杂度分析。 冒泡排序 冒泡排序是一种基础的排序算法,核心思想是将相邻的元素两两比较,将较大的元素向后移动。代码如下: public static void bubbleSort(int[] array) { f…

    Java 2023年5月19日
    00
  • Java创建和启动线程的两种方式实例分析

    Java创建和启动线程的两种方式实例分析 在 Java 中,线程是并发编程的核心概念之一。线程的创建和启动是任何并发应用的首要任务之一。Java 提供了两种方式来创建和启动线程,分别是继承 Thread 类和实现 Runnable 接口。 继承 Thread 类 继承 Thread 类是最常用的创建线程的方式,实现比较简单。我们需要继承 Thread 类,重…

    Java 2023年5月19日
    00
  • Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)

    整合Apache和Tomcat服务,将Jsp和PHP共用80端口的过程如下: 步骤一:安装Apache和Tomcat 如果还没有安装Apache和Tomcat服务,请先下载安装。本示例中使用的是最新版的Apache和Tomcat,下载地址如下: Apache HTTP Server: https://httpd.apache.org/download.cgi…

    Java 2023年5月19日
    00
  • Java_Spring之Spring5 的新特性

    Java Spring之Spring5 的新特性 简介 Spring是一个著名的开源框架,它旨在简化企业级应用程序的开发。Spring5是Spring框架的最新版本,它引入了许多新的功能和改进,以使应用程序的开发和管理更加容易。本文将介绍一些Spring5的新特性,帮助您更好地了解Spring5的能力。 Spring5的新特性 1. 支持Java8 Spri…

    Java 2023年5月31日
    00
  • 在IDEA中搭建最小可用SpringMVC项目(纯Java配置)

    以下是关于“在IDEA中搭建最小可用SpringMVC项目(纯Java配置)”的完整攻略,其中包含两个示例。 在IDEA中搭建最小可用SpringMVC项目(纯Java配置) Spring MVC是一个基于Java的Web框架,它可以帮我们快速开发Web应用程序。在IDEA中搭建最小可用SpringMVC项目非常简单,本文将介绍如何使用纯Java配置搭建最小…

    Java 2023年5月17日
    00
  • 教你开发脚手架集成Spring Boot Actuator监控的详细过程

    下面我将为您详细讲解“教你开发脚手架集成Spring Boot Actuator监控的详细过程”的完整攻略。 前言 在进行Spring Boot应用开发过程中,我们通常使用Spring Boot提供的Actuator来监控应用程序运行状况,但是每次开发都要重复搭建这个环境是非常浪费时间的,本文将教大家如何将Actuator融入开发的脚手架中,降低开发成本。 …

    Java 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部