SpringMVC实现文件上传与下载

1.文件上传
文件上传一般包括前端页面的文件选择、文件上传、后台接收文件、保存文件等步骤。

1.1 前端页面HTML代码示例

<form action="upload" method="post" enctype="multipart/form-data">
   <input type="file" name="file"/>
   <input type="submit" value="上传"/>
</form>

1.2 后台Controller代码示例

@Controller
public class FileUploadController {

    @RequestMapping(value="/upload", method=RequestMethod.POST)
    public String handleFileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
        try {
            String fileName = file.getOriginalFilename();
            String path = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
            // 保存文件
            file.transferTo(new File(path));
            request.setAttribute("msg", "文件上传成功!");
        } catch (Exception e) {
            request.setAttribute("msg", "文件上传失败!");
        }
        return "fileupload";
    }
}

其中,@RequestParam("file")注解表示接收名字为file的文件,@RequestMapping(value="/upload", method=RequestMethod.POST)表示请求url为/upload,请求方法为POST。

1.3 文件上传结果展示HTML代码示例

<div style="text-align:center">
    <!-- 如果msg不为空,即为上传失败,添加红色字体颜色 -->
    <p style="${empty msg? 'color:#FF0011': ''}">${msg}</p>
    <img src="upload/${file.name}" alt="no image"/>
    <p>上传文件名字:${file.name}</p>
    <p>上传文件大小:${file.size}</p>
</div>

其中,${}表示引用传参进来的数据,upload/${file.name}表示文件上传之后保存的路径。

2.文件下载
文件下载与文件上传不同,文件下载只能从后台进行处理。一般包含前端页面的选择文件、请求后台数据、后台返回数据等步骤。

2.1 前端页面HTML代码示例

<a href="download?file=example.txt">下载文件</a>

其中,download?file=example.txt表示请求url,file表示后台根据该字段获取文件。

2.2 后台Controller代码示例

@Controller
public class FileDownloadController {

    @RequestMapping("/download")
    public ResponseEntity<byte[]> fileDownload(HttpServletRequest request) throws Exception{
        // 获取文件名,根据文件名从磁盘获取文件
        String fileName = request.getParameter("file");
        String downLoadPath = request.getSession().getServletContext().getRealPath("/upload/" + fileName);
        FileInputStream inputStream = new FileInputStream(new File(downLoadPath));

        // 将文件返回
        byte[] bytes = new byte[inputStream.available()];
        inputStream.read(bytes);
        HttpHeaders httpHeaders = new HttpHeaders();
        httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        httpHeaders.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"), "ISO-8859-1"));
        ResponseEntity<byte[]> responseEntity = new ResponseEntity<byte[]>(bytes, httpHeaders, HttpStatus.OK);
        inputStream.close();

        return responseEntity;
    }
}

其中,@RequestMapping("/download")表示请求url为/download。

2.3 文件下载结果展示HTML代码示例

文件下载在后台即可完成,无需前端页面展示。

以上即为SpringMVC实现文件上传与下载的完整攻略。

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

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

相关文章

  • Spring MVC 与 CORS跨域的详细介绍

    Spring MVC 与 CORS跨域的详细介绍 在Web开发中,跨域请求是一种常见的需求。CORS(Cross-Origin Resource Sharing)是一种机制,它允许Web应用程序从不同的域访问其资源。本文将详细介绍Spring MVC与CORS跨域的相关知识,并提供两个示例说明。 CORS跨域的实现原理 CORS跨域的实现原理是通过在HTTP…

    Java 2023年5月17日
    00
  • Java基础之代码死循环详解

    Java基础之代码死循环详解 简介 代码死循环是指在程序运行过程中,因为某些原因造成程序不停地重复执行某一段代码的现象。死循环通常是因为程序设计不合理或者编写错误所导致的,如果长时间不会自动退出,会造成计算机死机或者卡死。代码死循环是编写程序时需要避免的错误。 常见死循环 for循环死循环 for(int i=0; i>=0; i++){ System…

    Java 2023年5月20日
    00
  • maven报错:Failed to execute goal on project问题及解决

    针对“maven报错:Failed to execute goal on project问题及解决”的问题,我将提供以下攻略: 问题描述 在使用maven构建工程的过程中,可能会遇到如下报错: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.2.0:jar …

    Java 2023年6月2日
    00
  • 详解SpringBoot中使用JPA作为数据持久化框架

    下面为您详细讲解SpringBoot中使用JPA作为数据持久化框架的完整攻略。 1. JPA简介 JPA(Java Persistence API)是JavaEE标准的ORM(对象关系映射)规范,它提供了一种简化了的操作数据库的方式,将Java对象映射到关系型数据库,实现Java程序与数据库的隔离。JPA的实现包括Hibernate、EclipseLink等…

    Java 2023年5月20日
    00
  • Spring Boot 教程之创建项目的三种方式

    下面我将为您详细讲解“Spring Boot 教程之创建项目的三种方式”的完整攻略。 1. 概述 Spring Boot 是一个快速开发的框架,它提供了很多开箱即用的功能,可以让我们更轻松地创建和开发 Web 应用程序。创建 Spring Boot 项目的方法有很多,本文将介绍其中的三种方式。 2. 使用 Spring Initializr 创建 2.1 打…

    Java 2023年5月19日
    00
  • spring mvc DispatcherServlet之前端控制器架构详解

    Spring MVC DispatcherServlet之前端控制器架构详解 在Spring MVC中,DispatcherServlet是一个核心组件,它是前端控制器模式的实现。本文将详细介绍Spring MVC DispatcherServlet之前端控制器架构的实现原理和实现过程,并提供两个示例说明。 前端控制器架构的实现原理 前端控制器架构的实现原理…

    Java 2023年5月17日
    00
  • Java多线程通信wait()和notify()代码实例

    Java多线程通信wait()和notify()代码实例 目录 介绍 wait()方法和notify()方法 wait()和notify()方法的用法 示例说明 示例1:打印奇偶数 示例2:生产者和消费者模型 介绍 在Java多线程编程中,多个线程之间需要进行通信,来实现协作完成任务。Java提供了一种机制,即wait()和notify()方法,用于实现多线…

    Java 2023年5月19日
    00
  • Android UI设计与开发之实现应用程序只启动一次引导界面

    下面是Android UI设计与开发之实现应用程序只启动一次引导界面的攻略: 步骤一:创建一个启动界面 在你的Android应用程序中,创建一个启动界面,用于判断应用程序当前是否是第一次启动。当应用程序是第一次启动时,这个启动界面将会展示引导页面,否则直接跳转到应用程序主界面。 步骤二:判断是否是第一次启动 在启动界面中加入一些代码,用于判断当前应用程序是否…

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