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

yizhihongxing

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日

相关文章

  • Java陷阱之assert关键字详解

    Java陷阱之assert关键字详解 引言 在Java程序开发中,assert关键字是一种非常有用的调试和测试工具。它能够帮助我们在程序运行时检查程序中的假设与约束是否被满足,从而及时发现程序中的bug。但是,assert关键字也存在着一些陷阱和误区,如果使用不当,就可能会导致程序出现各种意想不到的问题。本文将详细讲解Java中assert关键字的使用方法、…

    Java 2023年5月27日
    00
  • JSP使用JDBC连接MYSQL数据库的方法

    下面是JSP使用JDBC连接MYSQL数据库的完整攻略。 准备工作 下载并安装MYSQL数据库。 下载并安装Tomcat服务器。 在Tomcat中配置JDBC驱动程序。将MYSQL的JDBC驱动程序(mysql-connector-java-x.x.xx.jar)放到Tomcat的lib目录下。如果没有该目录,需要手动创建。 JSP连接MYSQL数据库的步骤…

    Java 2023年6月15日
    00
  • Java基础知识精通二维数组的应用

    关于“Java基础知识精通二维数组的应用”的完整攻略,我将详细介绍如下: 一、了解什么是二维数组 在Java中,二维数组是指由多个一维数组组成的数组,每个一维数组又包含多个元素,相当于一个表格或矩阵。 二维数组的定义格式如下: 类型[][] 数组名 = new 类型[行数][列数]; 例如: int[][] arr = new int[3][2]; //定义…

    Java 2023年5月26日
    00
  • fastjson序列化时间自定义格式示例详解

    FastJson序列化时间自定义格式示例详解 在使用FastJson进行序列化时,我们有时需要对日期类型进行格式化,以满足项目需求,本文将详细讲解FastJson序列化时间的自定义格式方法。 一、使用JsonField注解自定义时间格式 FastJson提供了@JSONField注解,通过该注解可以对Java对象进行序列化并指定时间格式。 import co…

    Java 2023年5月20日
    00
  • Java JDBC批量执行executeBatch方法详解

    下面是“Java JDBC批量执行executeBatch方法详解”的完整攻略: 什么是executeBatch方法 在使用JDBC操作数据库时,我们有时候需要往数据库中插入或者更新大批量的数据。这时候如果每次执行一次SQL语句,就会影响程序的效率。JDBC提供了executeBatch方法,可以将多个SQL语句一次性提交到数据库中执行,从而提高程序的效率。…

    Java 2023年5月20日
    00
  • 详解Java如何简化条件表达式

    为了让您更好地理解Java如何简化条件表达式,我将为您提供以下攻略: 使用三元运算符进行条件判断 Java中的三元运算符:?:可以在单个表达式中代替简单的if-else语句。它使用三元操作符来计算一个表达式,并根据表达式的结果返回两个不同的值中的一个。格式如下所示: (condition) ? expression1 : expression2; 如果条件(…

    Java 2023年5月26日
    00
  • Java HttpClient技术详解

    Java HttpClient技术详解 什么是HttpClient HttpClient是一个HTTP客户端库,与Java标准库中的URLConnection相比,它更加灵活,可以支持HTTP协议更多的特性,并提供了更加便利的API。HttpClient广泛应用于与Web服务器之间建立HTTP连接和进行数据传输。 HttpClient的使用步骤 1. 创建H…

    Java 2023年5月19日
    00
  • Spring Boot webflux使用方法解析

    下面是关于“Spring Boot webflux使用方法解析”的完整攻略,包含两个示例说明。 Spring Boot webflux使用方法解析 Spring Boot webflux是Spring Boot框架的一部分,它提供了一种基于响应式编程的方式来构建Web应用程序。本文将详细介绍如何使用Spring Boot webflux来构建Web应用程序。…

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