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日

相关文章

  • SpringBoot集成mybatis连接oracle的图文教程

    下面就为您详细讲解“SpringBoot集成mybatis连接oracle的图文教程”的完整攻略。 准备工作 在Oracle官网下载安装最新的Oracle数据库。 在Maven的配置文件settings.xml中添加Oracle的依赖坐标,如下所示: <dependency> <groupId>com.oracle.jdbc</…

    Java 2023年5月20日
    00
  • 详解Tomcat双击startup.bat闪退的解决方法

    下面是“详解Tomcat双击startup.bat闪退的解决方法”的完整攻略。 问题背景 当我们在Windows系统上双击Tomcat的startup.bat启动脚本时,有时会出现闪退的情况。这可能是由于某些配置或系统环境问题导致的。下面我们将详解解决这一问题的方法。 解决方法 方法一:修改startup.bat文件 步骤如下: 打开Tomcat的安装目录,…

    Java 2023年5月19日
    00
  • Java后台接口开发初步实战教程

    我将详细讲解“Java后台接口开发初步实战教程”的完整攻略。首先,需要明白一个概念:后台接口指的是用来与前端页面进行数据交互的一种接口,是连接前端页面和后台数据库的桥梁。 接下来,我们来看一下Java后台接口的开发流程: Java后台接口开发流程 首先,需要准备好Java开发环境和相应的开发工具,如Eclipse、IntelliJ IDEA等; 接着,需要设…

    Java 2023年5月19日
    00
  • HTML相关知识点总结

    HTML相关知识点总结 什么是HTML? HTML(Hypertext Markup Language)是一种用于创建Web页面的标准标记语言。它使用标记标识文本、图片、链接和其他内容,告诉Web浏览器如何组织和显示页面。 HTML基础结构 HTML文档通常包括以下结构: <!DOCTYPE html> <html> <head…

    Java 2023年5月26日
    00
  • Mybatis拦截器的实现介绍

    Mybatis拦截器的实现介绍 什么是Mybatis拦截器? Mybatis拦截器是一个在执行SQL语句的过程中,能够拦截到SQL执行的各个环节的组件。它可以在SQL执行过程中进行自定义的操作,比如修改SQL、动态生成SQL等。Mybatis内置了一些拦截器,如分页插件、SQL打印插件等。 实现一个自定义的Mybatis拦截器 要实现一个自定义的Mybati…

    Java 2023年5月20日
    00
  • Android中ArrayList和数组相互转换

    下面我就来详细讲解一下“Android中ArrayList和数组相互转换”的完整攻略,包含以下内容: 将数组转换成ArrayList 将ArrayList转换成数组 示例说明:数组转ArrayList 示例说明:ArrayList转数组 将数组转换成ArrayList 如果我们需要使用ArrayList来操作数组,那么就需要将数组转换成ArrayList。下…

    Java 2023年5月26日
    00
  • JSP入门教程(4)

    当然,我很高兴为您提供有关“JSP入门教程(4)”完整攻略的详细解释。 简介 在JSP入门教程的第四部分中,我们将学习如何使用JSP中的if-else语句和switch语句,这些语句用于控制流程和决策。 if-else语句 if-else语句是一种流程控制语句,可用于根据条件执行不同的代码块。在JSP页面中,可以使用以下语法来编写if-else语句: &lt…

    Java 2023年6月15日
    00
  • Shell编程之变量的高级用法详解

    Shell编程之变量的高级用法详解 在Shell编程中,变量是经常被使用到的概念。除了基础的变量赋值外,还有更多高级的用法。在本文中,我们将讲解一些高级的变量用法。 1. 变量的替换和引用 1.1 命令替换 通过使用$( )或者` `将命令包含在内,可以将命令的结果值替换成变量值。例如: DATE=$(date +%Y-%m-%d) echo "T…

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