SpringMVC实现文件上传和下载功能

SpringMVC实现文件上传和下载功能

Spring MVC提供了很好的机制来实现文件上传和下载功能,但需要借助一些依赖包和配置设置。

1. 添加MultipartResolver Bean

在Spring MVC应用中,我们需要添加一个MultipartResolver Bean以处理文件上传的请求。MultipartResolver 接口定义了文件上传的各个方法, 其中包括解析 HttpServletRequest 并返回 MultipartHttpServletRequest 等。

添加MultipartResolver Bean的方法有两种:

方法一:使用Spring框架提供的CommonsMultipartResolver类

CommonsMultipartResolver 是一种常用的MultipartResolver实现类,它是由Apache软件基金会提供的commons-fileupload和commons-io包提供文件上传和I/O支持。

在Spring配置文件中添加以下内容:

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="20971520"/>    <!-- 20MB -->
    <property name="maxInMemorySize" value="1048576"/>   <!-- 1MB -->
    <property name="defaultEncoding" value="UTF-8"/>
</bean>

上述配置中,maxUploadSize属性指定了最大上传文件大小为20MB,maxInMemorySize属性指定了最大接收文件的内存大小为1MB,defaultEncoding属性指定了上传文件编码方式为UTF-8。

方法二:使用Spring框架提供的CommonsMultipartResolver类

在Spring配置文件中添加以下内容:

<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/>

2. 添加Upload控制器

Upload控制器用于处理上传文件的请求。

在控制器方法参数中添加javax.servlet.http.HttpServletRequest和org.springframework.web.multipart.MultipartFile类型的参数。

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(HttpServletRequest request, MultipartFile file) throws IOException {

    // 获取上传文件的名称和数据
    String fileName = file.getOriginalFilename();
    byte[] data = file.getBytes();

    // 保存文件
    FileOutputStream fos = new FileOutputStream("/path/to/save/" + fileName);
    fos.write(data);
    fos.close();

    // 返回成功信息
    return "uploaded successfully";
}

3. 添加Download控制器

Download控制器用于提供文件下载功能。

@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 获取文件路径
    String filePath = "/path/to/download/file";

    // 设置response参数
    response.setHeader("Content-Disposition", "attachment; filename=\"file.name\"");
    response.setContentType("application/octet-stream");
    response.setContentLength((int) file.length());

    // 获取文件输入流
    InputStream is = new FileInputStream(filePath);

    // 写出文件
    OutputStream os = response.getOutputStream();
    byte[] buff = new byte[1024];
    int length;
    while ((length = is.read(buff)) != -1) {
        os.write(buff, 0, length);
    }

    os.flush();
    os.close();
    is.close();
}

示例说明

这里给出两个示例:

示例一:文件上传

在前端表单中添加文件上传控件。

<form action="/upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" value="Upload"/>
</form>

示例二:文件下载

在前端添加链接。

<a href="/download">Download File</a>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringMVC实现文件上传和下载功能 - Python技术站

(0)
上一篇 2023年6月15日
下一篇 2023年6月15日

相关文章

  • Struts2配置文件中使用通配符的方法(三种形式)

    使用通配符在Struts2配置文件中可以方便地定义多个相似的Action或者Interceptor,以及进行全局的配置。 在Struts2的配置文件中,有三种形式可以使用通配符,分别如下: 使用“”号通配符 例如:<package name=”default” extends=”struts-default”> <action name=”…

    Java 2023年5月20日
    00
  • springboot使用消息中间件

    Spring Boot是一个快速构建应用程序的框架,它提供了许多常用的功能,如Web、数据访问、安全等。在Spring Boot中,我们可以使用消息中间件来实现异步通信,提高应用程序的性能和可伸缩性。以下是Spring Boot使用消息中间件的完整攻略: 添加消息中间件依赖 在Spring Boot中,我们可以使用Maven或Gradle来添加消息中间件依赖…

    Java 2023年5月15日
    00
  • SpringBoot使用Sharding-JDBC实现数据分片和读写分离的方法

    SpringBoot使用Sharding-JDBC实现数据分片和读写分离的方法 概述 Sharding-JDBC是基于JDBC的分布式数据库中间件,用于替代传统数据库的分布式架构。Sharding-JDBC采用读写分离和数据分片等技术,使得应用程序无需了解底层数据库的实现细节,可以直接访问逻辑表的数据,同时对于外部应用程序的影响也同样降到了最低,非常适合大型…

    Java 2023年5月20日
    00
  • Java时间工具类Date的常用处理方法

    下面是“Java时间工具类Date的常用处理方法”完整攻略: 一、Date类的创建方法 Date类的实例可以用以下两种方法创建: 1. 使用无参构造函数创建 Date date = new Date(); System.out.println(date); //2022-03-16 14:11:52 2. 使用long类型的构造函数创建,参数为从1970年1…

    Java 2023年5月20日
    00
  • Java日期时间类及计算详解

    Java日期时间类及计算详解 Java中提供了多个日期时间类,用于操作和计算日期和时间。本文将详细介绍Java日期时间类及计算的相关知识。 Date类 Date类是Java中最基本的日期时间类。它表示时间戳,即自1970年1月1日00:00:00至当前日期时间所经过的毫秒数。 获取当前日期时间 要获取当前日期时间,可以使用Date类的无参构造函数和toStr…

    Java 2023年5月20日
    00
  • Java经典面试题最全汇总208道(三)

    针对“Java经典面试题最全汇总208道(三)”的攻略,我将会进行详细的讲解,包括其中每个问题的答案和解释。 标题 Java经典面试题最全汇总208道(三) 代码块 下面是一道比较常见的Java面试题: public class Test{ public static void main(String[] args) { String str1 = new …

    Java 2023年5月23日
    00
  • Java常用加密算法实例总结

    Java常用加密算法实例总结 在Java开发过程中,常常需要对数据进行加密和解密处理。为了实现这个目的,Java引入了多种加密算法,本文将对Java常用的加密算法进行总结,并给出两个示例说明。 对称加密算法 对称加密算法指的是加密和解密使用相同密钥的算法。它的特点是加密和解密速度快,但密钥容易泄露。Java支持的对称加密算法有DES、3DES和AES。 DE…

    Java 2023年5月19日
    00
  • Java编程实现非对称加密的方法详解

    Java编程实现非对称加密的方法详解 非对称加密算法需要公钥和私钥。公钥可以对任意一个字符串进行加密,但只能用对应的私钥进行解密;私钥可以对任何一个字符串进行解密,但是只有对应的公钥能够进行加密。 生成密钥对 Java提供了多种非对称加密算法,比如RSA算法。使用Java生成RSA密钥对的过程如下: import java.security.KeyPair;…

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