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日

相关文章

  • 优化spring boot应用后6s内启动内存减半

    请允许我详细讲解如何优化Spring Boot应用,使它在6秒内启动并且内存减半: 第一步:分析应用性能 分析应用是优化性能的第一步,了解应用的瓶颈并进行针对性优化。可以使用Spring Boot Actuator来分析应用的性能,包括各个端点的响应时间和应用的吞吐量。同时,还可以使用Java监控工具来查看应用的堆内存和线程使用情况。 第二步:优化应用配置 …

    Java 2023年5月20日
    00
  • SpringMVC自定义属性编辑器详解及实例

    下面是关于“SpringMVC自定义属性编辑器详解及实例”的完整攻略,包含两个示例说明。 SpringMVC自定义属性编辑器详解及实例 在SpringMVC中,属性编辑器是一种用于将字符串转换为Java对象的机制。本文将介绍如何自定义属性编辑器,并提供两个示例说明。 步骤一:创建属性编辑器 首先,我们需要创建一个属性编辑器。属性编辑器是一个Java类,它实现…

    Java 2023年5月17日
    00
  • Spring Boot应用程序中如何使用Keycloak详解

    使用Keycloak是为应用程序添加身份验证和授权的一种流行方式。Spring Boot提供了一个快速简便的方式整合Keycloak。本文将会以实例的方式介绍如何在Spring Boot应用程序中使用Keycloak。 准备工作 在开始使用Keycloak前,需要进行以下准备工作: 安装Java SDK和Maven 下载和安装Keycloak 创建Keycl…

    Java 2023年6月3日
    00
  • 服务器完美设置,支持asp php cgi jsp asp.net mysql!

    下面是服务器完美设置的完整攻略。 服务器环境 首先我们需要确保服务器环境是支持asp、php、cgi、jsp、asp.net和mysql的。我们需要安装和配置以下软件: Web服务器:常用的有Apache、IIS、Nginx等,这里以Apache为例进行说明。 ASP支持:ASP需要安装IIS或者Apache+mod_aspdll插件。 PHP支持:需要安装…

    Java 2023年6月15日
    00
  • 代理模式之Java动态代理实现方法

    代理模式之Java动态代理实现方法 代理模式是一种常见的设计模式,它允许使用代理对象来控制对某个对象的访问。代理对象通常维护着对真正对象的引用,并在访问时进行特定的处理,例如对对象方法的调用进行拦截或增强。Java动态代理是一种强大的实现代理模式的方法,它基于Java反射机制,可以在运行时动态地生成代理类,无需手动创建代理类,非常灵活。 下面我们来看一下Ja…

    Java 2023年5月19日
    00
  • Commons beanutils组件简介

    Commons BeanUtils 组件简介 Commons BeanUtils 组件是 Apache Common 组件库中的一个组件,它提供了许多用于操作 JavaBean 对象的工具类。 功能介绍 Commons BeanUtils 主要提供以下几个方面的功能: 属性拷贝 BeanUtils 提供了一个 copyProperties() 方法,用于从一…

    Java 2023年6月15日
    00
  • Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)

    整合Apache和Tomcat服务,将Jsp和PHP共用80端口的过程如下: 步骤一:安装Apache和Tomcat 如果还没有安装Apache和Tomcat服务,请先下载安装。本示例中使用的是最新版的Apache和Tomcat,下载地址如下: Apache HTTP Server: https://httpd.apache.org/download.cgi…

    Java 2023年5月19日
    00
  • Java中字符数组和字符串与StringBuilder和字符串转换的讲解

    下面我将为您详细讲解Java中字符数组和字符串与StringBuilder和字符串转换的完整攻略。 1. 字符数组和字符串 1.1 字符数组 在Java中,字符数组是由char类型的元素构成的一种数据结构,可以通过以下代码创建: char[] charArray = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’}; 1.2 字符串 字符串是由一系列字符组…

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