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日

相关文章

  • Java算法真题详解运用单调栈

    Java算法真题详解运用单调栈攻略 1. 什么是单调栈 单调栈是指栈中元素单调递增或递减的栈。 单调栈在算法中的应用比较广泛,经常用来解决类似于比当前数大的第一个数、比当前数小的第一个数等等问题。 2. 单调栈解法 单调栈的解法分为两类:单调递增栈和单调递减栈。具体的应用方式如下: 2.1. 单调递增栈 单调递增栈指栈中元素单调递增,栈底元素最小。 单调递增…

    Java 2023年5月19日
    00
  • 手写redis@Cacheable注解 支持过期时间设置方式

    这里是“手写redis@Cacheable注解 支持过期时间设置方式”的完整攻略。 1. 概述 Redis缓存提供了较高的性能,而Spring提供了注解方式方便我们使用Redis缓存。Spring的@Cacheable注解可以让我们轻松地实现缓存技术,但Spring的默认缓存过期时间是无限期的,这就意味着我们无法控制每个缓存项的过期时间。因此,我们需要手写R…

    Java 2023年5月20日
    00
  • springcloud~Sentinel

    介绍 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。2013-2017 年,…

    Java 2023年5月5日
    00
  • 指南:想成为一个JSP网站程序员吗?

    下面我将详细讲解“指南:想成为一个JSP网站程序员吗?”的完整攻略,希望对想要学习JSP网站开发的读者们有所帮助。 一、什么是JSP? JSP(JavaServer Pages)是一种基于Java语言和HTML的技术,它主要用于创建动态Web页面。JSP页面由一组HTML标签和Java代码组成,因此,JSP网站程序员必须具备Java编程和Web开发方面的技能…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“NullForwardConfigException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“NullForwardConfigException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置,则可能会出现此错误。在这种情况下,需要检查文件以解决此问题。 转发名称:如果转发名称不正确,则可能出现此错误。在这种情况下,需要检查转发名称以解决此问题。 以下是两个实例: 例 1 …

    Java 2023年5月5日
    00
  • java web图片上传和文件上传实例详解

    Java Web 图片上传和文件上传实例详解 在 Java Web 开发中,图片上传和文件上传是一个非常常见的操作。本文将会介绍如何在 Java Web 中实现图片上传和文件上传,以及如何在前端进行用户体验的优化。 上传文件的基本步骤 上传文件的基本步骤如下: 创建一个表单,用于选择文件。表单的 method 必须为 POST, enctype 必须为 mu…

    Java 2023年5月20日
    00
  • Java中TypeReference用法详情说明

    当我们需要在Java中将一个类型传递给另一个类或方法的时候,通常需要使用TypeReference。TypeReference是一个泛型类,它用于获取某个泛型类型的完整信息。 下面提供两个示例,以说明TypeReference的用法: 示例一:获取Map泛型类型的完整信息 假设我们有一个Map类型的变量,我们想要知道它的泛型类型是什么,该怎么办呢? Map&…

    Java 2023年5月26日
    00
  • Java面向对象之继承的概念详解

    Java面向对象之继承的概念详解 继承是面向对象编程的三大特性之一,也是Java程序设计中重要的概念之一。继承允许我们在已有类的基础上定义新的类,新的类可以继承父类的属性和方法,同时可以添加自己的属性和方法。 继承的定义和基本语法 继承(inheritance)是OO(面向对象)技术的一个基本概念,它是从已有类中派生出新的类,新的类可以拥有父类的属性和方法,…

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