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日

相关文章

  • Java 把json对象转成map键值对的方法

    将 JSON 对象转换成 Map 对象有两种方法: 1. 使用 Jackson 库 Jackson 是一个流行的 JSON 处理库,它可以轻松地将 JSON 转换成 Java 对象或 Map 对象,反之亦然。可以通过 Maven 或 Gradle 将 Jackson 依赖项添加到项目中: <dependency> <groupId>c…

    Java 2023年5月26日
    00
  • RedisTemplate访问Redis的更好方法

    让我来详细讲解RedisTemplate访问Redis的更好方法的完整攻略。 RedisTemplate介绍 RedisTemplate是一个封装了Jedis库的Spring框架的Redis操作工具类,使用它可以更方便、更快速、更安全地对Redis进行读写。 如何使用RedisTemplate 使用RedisTemplate操作Redis,需要先创建一个Re…

    Java 2023年5月20日
    00
  • 6000+字讲透ElasticSearch 索引设计

    ElasticSearch 索引设计 在MySQL中数据库设计非常重要,同样在ES中数据库设计也是非常重要的 概述 我们创建索引就像创建表结构一样,必须非常慎重的,索引如果创建不好后面会出现各种各样的问题 索引设计的重要性 索引创建后,索引的分片只能通过_split和_shrink接口对其进行成倍的增加和缩减 主要是因为es的数据是通过_routing分配到…

    Java 2023年5月11日
    00
  • java实现微信H5支付方法详解

    Java实现微信H5支付方法详解 微信H5支付是一种便捷的支付方式,它允许用户在微信H5浏览器中完成支付。在Java中,我们可以使用微信支付官方提供的Java SDK来实现微信H5支付功能。 以下是实现微信H5支付的详细步骤: Step1:获取微信支付相关信息 首先,我们需要去申请微信支付的相关信息,包括商户号和应用密钥等。申请完成后,我们可以在微信商户平台…

    Java 2023年6月15日
    00
  • java解析出url请求的路径和参数键值对类(解析出url请求的路径,包括页面)

    下面是详细的攻略: 1. 确定需求和目标 在写代码之前,我们需要明确自己的目标和需求,即需要完成什么样的功能。根据题目的要求,我们需要编写一个Java类,该类可以解析出传入的URL请求的路径和参数键值对。 2. 解析路径和参数 在Java中,我们可以使用Java内置的类库中的java.net.URL和java.net.URLConnection类来获取URL…

    Java 2023年6月15日
    00
  • 详解Spring Security 简单配置

    《详解Spring Security 简单配置》是一篇介绍如何简单配置Spring Security的文章。下面是详细攻略: 1. 引入依赖 首先需要在项目中引入Spring Security的依赖,可以从Maven Central Repository中搜索Spring Security依赖,选择适合的版本引入。 2. 配置Spring Security …

    Java 2023年5月20日
    00
  • Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

    Java+Nginx实现POP、IMAP、SMTP邮箱代理服务攻略 一、背景介绍 在实际开发中,我们有时需要一个邮箱服务来测试或者模拟实现。为此,我们需要搭建一个邮箱代理服务来代替真实的邮箱服务器。本文将介绍如何使用Java和Nginx来搭建一个完整的邮箱代理服务。 二、实现方法 1. 构建Java服务器 Java可以作为一个服务器来接收和处理客户端发送的数…

    Java 2023年5月20日
    00
  • Java探索之string字符串的应用代码示例

    Java探索之string字符串的应用代码示例是一篇介绍Java中字符串应用的文章,本文将详细讲解这篇文章的完整攻略,包括:文章结构、主要内容、示例说明等。 文章结构 Java探索之string字符串的应用代码示例文章包含以下结构: 标题:Java探索之string字符串的应用代码示例 导言:对本文的主题进行简单介绍,概括本文的主要内容 概述:对Java中字…

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