JavaWeb实现文件上传与下载实例详解

JavaWeb实现文件上传与下载实例详解

1. 实现文件上传

1.1. HTML表单

首先需要编写一个表单用于上传文件:

<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
  <input type="file" name="file">
  <input type="submit" value="上传">
</form>

需要注意的是,表单的enctype属性必须设置为multipart/form-data,以支持文件上传。

1.2. Servlet后台处理

然后需要编写一个Servlet来处理文件的上传:

@WebServlet("/FileUploadServlet")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    Part part = request.getPart("file");
    String fileName = part.getSubmittedFileName();
    InputStream inputStream = part.getInputStream();
    File file = new File(fileName);
    FileOutputStream outputStream = new FileOutputStream(file);
    byte[] buffer = new byte[1024];
    int len = inputStream.read(buffer);
    while (len != -1) {
      outputStream.write(buffer, 0, len);
      len = inputStream.read(buffer);
    }
    outputStream.close();
    inputStream.close();
    response.getWriter().write("上传成功");
  }
}

这里使用了Servlet 3.0中的@MultipartConfig注解来支持文件上传,使用了request.getPart()方法获取了上传的文件,然后将文件写入磁盘即可。

2. 实现文件下载

2.1. HTML链接

首先需要编写一个链接用于下载文件:

<a href="FileDownloadServlet?fileName=test.txt">下载文件</a>

2.2. Servlet后台处理

然后需要编写一个Servlet来处理文件的下载:

@WebServlet("/FileDownloadServlet")
public class FileDownloadServlet extends HttpServlet {
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String fileName = request.getParameter("fileName");
    File file = new File(fileName);
    response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(), "UTF-8"));
    InputStream inputStream = new FileInputStream(file);
    OutputStream outputStream = response.getOutputStream();
    byte[] buffer = new byte[1024];
    int len = inputStream.read(buffer);
    while (len != -1) {
      outputStream.write(buffer, 0, len);
      len = inputStream.read(buffer);
    }
    outputStream.close();
    inputStream.close();
  }
}

这里需要设置Content-Disposition响应头为attachment,浏览器会将该文件以附件形式下载,另外,需要使用URLEncoder.encode()方法对文件名进行编码,以支持中文文件名的下载。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaWeb实现文件上传与下载实例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java8的default方法详细介绍

    Java8的default方法详细介绍 什么是default方法 default方法又称为默认方法,是Java8版本引入的一项新特性。默认方法是指在接口中可以有方法实现,而不必让所有实现该接口的类都提供自己的实现。 default方法的语法 default方法的语法为: public default 返回值类型 方法名(参数列表) { // 方法体 } 其中…

    Java 2023年5月26日
    00
  • Java实时监控日志文件并输出的方法详解

    Java实时监控日志文件并输出的方法,可以使用Java IO和多线程的知识来完成。主要流程可以分为以下几步: 创建一个文件读取器,用于读取日志文件的内容。 定义一个线程类,用于不断读取文件内容,并输出到控制台或其他存储介质中。 开启线程,开始实时监控日志文件。 具体实现步骤如下: 1、创建一个文件读取器 使用Java IO中的FileReader和Buffe…

    Java 2023年5月26日
    00
  • Java读取并下载网络文件的方法

    以下是详细的“Java读取并下载网络文件的方法”的攻略: 1. 使用Java标准库中的URL和URLConnection类实现 1.1 代码示例 import java.io.InputStream; import java.io.FileOutputStream; import java.net.URL; import java.net.URLConnec…

    Java 2023年5月20日
    00
  • 浅谈一个基础的SpringBoot项目该包含哪些

    一个基础的SpringBoot项目应该包含以下几个部分: 1. 项目结构 一般来说,一个Spring Boot 项目的包结构应该包含三个主要部分:application、config 和 controller。 application: 启动类的所在包,在 Spring Boot 项目中只能有一个,一般放在项目的根目录下。 config: 配置类所在的包,这…

    Java 2023年5月19日
    00
  • docker(一):Develop faster. Run anywhere.

    前言 在进行微服务部署时,首先需要进行部署环境的搭建。目前,Docker 已经成为了微服务部署的主流解决方案之一。Docker 可以帮助我们更快地打包、测试以及部署应用程序,从而缩短从编写到部署运行代码的周期。 在本文中,我们将对 Docker 进行初步的讲解,并介绍如何将映像生成并作为容器运行、使用 Docker Hub 共享映像。具体的功能点如下: 将映…

    Java 2023年5月11日
    00
  • mybatis简介与配置_动力节点Java学院整理

    下面我将介绍关于MyBatis的简介与配置,并附上两个示例供参考。 Mybatis简介 MyBatis是一个开源的Java持久化框架,它通过XML或注解实现了对SQL的映射,将程序中的Java对象自动映射到数据库中的对应表格。MyBatis可以很好地解决Java程序中数据的存取问题,同时它也提供了很好的扩展性。 MyBatis最初是iBATIS项目,2006…

    Java 2023年5月20日
    00
  • mysql如何创建数据库并指定字符集

    mysql如何创建数据库并指定字符集? 在MySQL中,可以使用CREATE DATABASE命令来创建新的数据库,同时可以通过指定COLLATE选项来指定数据库所使用的字符集。下面是完整的创建数据库并指定字符集的攻略: 步骤1:登录MySQL 要使用MySQL的命令行工具来创建数据库,首先需要登录到MySQL。可以使用以下命令来登录到MySQL: mysq…

    Java 2023年5月20日
    00
  • Java编程之继承问题代码示例

    让我详细地讲解一下“Java编程之继承问题代码示例”的完整攻略。 什么是继承? 继承是面向对象编程中的一个重要概念,它允许新的类继承现有类的属性和方法。这个新类称为子类或派生类,被继承的类称为父类或基类。子类继承父类后,可以在不破坏原有功能的情况下,增加或修改一些功能。这有助于实现代码重用,提高程序的灵活性。 继承问题代码示例 下面的代码演示了继承问题的示例…

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