Javaweb实现上传下载文件的多种方法

Javaweb实现上传下载文件的多种方法攻略

在开发Javaweb应用时,文件的上传和下载是非常常见的需求。本文将介绍Javaweb实现上传下载文件的多种方法,并提供两个代码示例。

上传文件的几种方式

1. 使用Servlet API实现文件上传

使用Servlet API实现文件上传需要使用标准的 javax.servlet 库中配套的 HttpServletRequestPart 接口。使用 HttpServletRequest.getParts() 方法可以获取上传的所有文件,而一个上传的文件对应一个 Part 对象。以下是一个示例代码:

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

    Collection<Part> parts = request.getParts();
    for (Part part : parts) {
        String fileName = extractFileName(part);
        part.write(savePath + fileName);
    }
}

private String extractFileName(Part part) {
    String contentDisposition = part.getHeader("content-disposition");
    String[] items = contentDisposition.split(";");
    for (String item : items) {
        if (item.trim().startsWith("filename")) {
            return item.substring(item.indexOf("=") + 2, item.length() - 1);
        }
    }
    return "";
}

2. 使用Apache Commons FileUpload实现文件上传

使用Apache Commons FileUpload工具包实现文件上传非常方便,除了需要增加依赖,大部分代码都可以由该工具包的类库来完成。以下是一个示例代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);

    for (FileItem item : items) {
        if (!item.isFormField()) {
            String fileName = new File(item.getName()).getName();
            item.write(new File(savePath + File.separator + fileName));
        }
    }
}

下载文件的几种方式

1. 使用Servlet API实现文件下载

使用Servlet API实现文件下载需要在 Servlet 中设置响应内容为文件类型,并设置响应报文头,包括文件名和响应类型。以下是一个示例代码:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String filePath = request.getParameter("filePath");
    String fileName = extractFileName(filePath);
    File file = new File(filePath);

    ServletContext context = getServletContext();
    String mimeType = context.getMimeType(filePath);

    if (mimeType == null) {
        mimeType = "application/octet-stream";
    }

    response.setContentType(mimeType);
    response.setContentLength((int) file.length());

    String headerKey = "Content-Disposition";
    String headerValue = String.format("attachment; filename=\"%s\"", fileName);
    response.setHeader(headerKey, headerValue);

    InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
    OutputStream outputStream = response.getOutputStream();

    byte[] buffer = new byte[4096];
    int bytesRead = -1;

    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }

    inputStream.close();
    outputStream.close();
}

private String extractFileName(String path) {
    int separatorIndex = path.lastIndexOf("/");
    return separatorIndex < 0 ? path : path.substring(separatorIndex + 1);
}

2. 使用Spring WebMVC框架实现文件下载

使用 Spring WebMVC 框架实现文件下载非常方便,只需要返回一个 ResponseEntity<byte[]> 类型的对象即可。以下是一个示例代码:

@GetMapping("/download")
public ResponseEntity<byte[]> downloadFile(@RequestParam("filePath") String filePath) throws IOException {
    File file = new File(filePath);
    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.setContentDispositionFormData("attachment", file.getName());
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");

    byte[] byteArray = Files.readAllBytes(file.toPath());

    return new ResponseEntity<>(byteArray, headers, HttpStatus.OK);
}

以上就是 Javaweb 实现上传下载文件的多种方法的攻略和代码示例。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Javaweb实现上传下载文件的多种方法 - Python技术站

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

相关文章

  • PHP模拟登陆163邮箱发邮件及获取通讯录列表的方法

    下面是关于PHP模拟登陆163邮箱并进行发邮件、获取通讯录列表的详细攻略。 步骤一:模拟登陆163邮箱 首先,我们需要进行模拟登陆163邮箱。为了实现这个目标,我们可以采用CURL库来构建HTTP请求,并通过DOMDocument和SimpleXMLElement处理HTML和XML文档。下面是模拟登陆的详细步骤: 1. 准备登陆数据 我们需要准备一个数组来…

    Java 2023年6月16日
    00
  • maven插件spring-boot-starter-tomcat的使用方式

    Maven是一款非常流行的Java项目构建工具,而Spring Boot则是基于Spring框架的快速应用开发框架。spring-boot-starter-tomcat是Spring Boot中自带的Maven插件,它可以帮助我们快速构建和部署基于Tomcat的Web应用程序。下面是使用spring-boot-starter-tomcat插件的详细攻略。 1…

    Java 2023年5月19日
    00
  • JSP 连接MySQL配置与使用

    下面我来为你详细讲解“JSP 连接 MySQL 配置与使用”的完整攻略。 1.准备工作 在开始连接 MySQL 数据库之前,我们需要进行一些准备工作: 1.1.安装 MySQL 你需要先安装 MySQL 数据库,并且启动 MySQL 服务。 1.2.下载 JDBC 驱动 JDBC 驱动是用于连接 MySQL 数据库的一个重要工具。你需要从 MySQL 官网上…

    Java 2023年6月15日
    00
  • Maven的安装配置详解

    Maven的安装配置详解 Maven是一种项目管理工具,它可以自动化构建过程并管理项目的依赖关系。Maven使用XML描述项目,使用“pom.xml”文件配置项目的基本信息、依赖以及构建方式。 本文将详细讲解Maven的安装和配置步骤。 安装Maven 访问Maven官网https://maven.apache.org/,下载最新的Maven版本(目前是3.…

    Java 2023年6月2日
    00
  • SpringMVC @RequestMapping注解属性详细介绍

    以下是关于“SpringMVC @RequestMapping注解属性详细介绍”的完整攻略,其中包含两个示例。 SpringMVC @RequestMapping注解属性详细介绍 在SpringMVC中,@RequestMapping注解是一个非常重要的注解,它用于将请求映射到对应的控制器方法上。@RequestMapping注解有很多属性,下面我们来详细介…

    Java 2023年5月16日
    00
  • 微信语音上传 下载功能实例代码

    让我来详细讲解“微信语音上传下载功能实例代码”的完整攻略。 1. 背景介绍 在现代的 Web 应用程序中,上传和下载文件通常是一项非常基本的功能。微信作为一款非常流行的社交软件,也提供了语音上传和下载的功能。本文将介绍如何实现微信语音上传和下载功能,并给出相应的示例代码。 2. 实现思路 为了实现微信语音上传和下载功能,需要了解微信的相关 API 和协议。下…

    Java 2023年5月19日
    00
  • java如何实现自动生成数据库设计文档

    实现Java自动生成数据库设计文档的过程可以分为以下几个步骤: 获取数据库的基本信息 首先需要连接到数据库,获取其中的基本信息,例如数据库的名称、版本号等。在Java中可以使用JDBC连接数据库,通过执行SQL语句获取这些信息。 获取数据库中的表信息 获取数据库中的表信息,包括表名、表的列信息等。可以通过执行SQL语句查询system表或metadata元数…

    Java 2023年5月19日
    00
  • java简介及环境搭建

    Java简介及环境搭建 Java简介 Java是一种面向对象的编程语言,由Sun Microsystems公司于1995年推出。Java语言具有跨平台性和开发效率高等特点,成为了一种非常流行的编程语言。 Java环境搭建 为了学习和开发Java程序,我们需要先搭建Java环境。 安装Java开发工具包(JDK) 首先,我们需要下载并安装Java开发工具包(J…

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