开发|Springboot文件上传与下载

简介: 开发|Springboot文件上传与下载

问题描述

我们在做项目的时候很多时候会涉及到操作文件的步骤,今天我们就来讲讲如何实现Springboot文件上传与下载。

解决方案

话不多说,我们直接上代码。

首先是添加依赖:

```
<dependency>
   <groupId>commons-fileupload</groupId>
   <artifactId>commons-fileupload</artifactId>
   <version>1.3.1</version>
</dependency>
```

application.properties文件里添加如下内容:

```
spring.servlet.multipart.file-size-threshold=0B
#文件大小阈值,当大于这个阈值时将写入到磁盘,否则在内存中。默认值为0
spring.servlet.multipart.max-request-size=100MB  
#设置上传文件总大小为100MB
spring.servlet.multipart.max-file-size=100MB
```

然后是文件上传的代码:

### 下面是文件上传Controller的代码

@Controller
@RequestMapping("/")
public class FileController {
    //         定义文件存放的父文件夹路径
    private static String parentPath =  "D:"+File.separator+"fileUpload";


    @RequestMapping("/upload")
    public String upload(){
        return "upload";
    }
    @RequestMapping(value = "/upload",method =  RequestMethod.POST)
    @ResponseBody
    public String upload(@RequestParam("file")  MultipartFile file){
//        判断上传文件是否为空,若为空则返回错误信息
        if(file.isEmpty()){
            return  "上传失败";
        }else{
//         获取文件原名
         String originalFilename  = file.getOriginalFilename();
            System.out.println(originalFilename);
//         获取源文件前缀
         String fileNamePrefix =  originalFilename.substring(0,originalFilename.lastIndexOf("."));
         //获取源文件后缀
         String fileNameSuffix =  originalFilename.substring(originalFilename.lastIndexOf("."));
//         将源文件前缀之后加上时间戳避免重名
         String  newFileNamePrefix = fileNamePrefix+new Date().getTime();
//         得到上传后新文件的文件名
         String newFileName =  newFileNamePrefix+fileNameSuffix;
//         创建一个新的File对象用于存放上传的文件
            File  fileNew = new File(parentPath+File.separator+newFileName);
            try {
                file.transferTo(fileNew);
            }  catch (IOException e) {
                e.printStackTrace();
            }
        }
        return "上传成功";
    }
}
```

###以及文件上传的html代码

```html
<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-type"  content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible"  content="IE=edge,chrome=1"/>
    <title>单文件上传</title>
</head>
<body>
<form method="post" action="/upload"  enctype="multipart/form-data">
    <input type="file"  name="file">
    <input type="submit" value="提交">
</form>
</body>
</html>

```

最后是文件下载的代码:

###如下是文件下载的Controller代码
当然filename在实际的使用中不会被写死,但是在这里演示就直接写死吧
```java
 @RequestMapping(value = "/download",method =  RequestMethod.GET)
    public void download(HttpServletResponse response){
//        通过response输出流将文件传递到浏览器
//        1、获取文件路径
        String fileName = "文件";
//2.构建一个文件通过Paths工具类获取一个Path对象
        Path path =  Paths.get(parentPath,fileName);
        //判断文件是否存在
        if (Files.exists(path)){
            //存在则下载
            //通过response设定他的响应类型
            //4.获取文件的后缀名
            String  fileSuffix = fileName.substring(fileName.lastIndexOf(".")+1);
//            5.设置contentType ,只有指定contentType才能下载
            response.setContentType("application/"+fileSuffix);
//            6.添加http头信息
//            因为fileName的编码格式是UTF-8 但是http头信息只识别 ISO8859-1 的编码格式
//            因此要对fileName重新编码
            try {
                response.addHeader("Content-Disposition","attachment;filename="+new  String(fileName.getBytes("UTF-8"),"ISO8859-1"));
            }  catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
//            7.使用  Path response输出流将文件输出到浏览器
            try {
                Files.copy(path,response.getOutputStream());
            }  catch (IOException e) {
                e.printStackTrace();
            }
        }

    }
```

我们的目的就达成啦!

结语

具体代码的意思到在代码中给了注解的哦,希望能够帮助到你们哦。

目录
相关文章
|
7月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
496 7
|
7月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
7月前
|
XML 前端开发 Java
SpringBoot实现文件上传下载功能
本文介绍了如何使用SpringBoot实现文件上传与下载功能,涵盖配置和代码实现。包括Maven依赖配置(如`spring-boot-starter-web`和`spring-boot-starter-thymeleaf`)、前端HTML页面设计、WebConfig路径映射配置、YAML文件路径设置,以及核心的文件上传(通过`MultipartFile`处理)和下载(利用`ResponseEntity`返回文件流)功能的Java代码实现。文章由Colorful_WP撰写,内容详实,适合开发者学习参考。
728 0
|
8月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
729 79
|
6月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
596 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
5月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
615 0
|
8月前
|
人工智能 自然语言处理 前端开发
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
本文介绍如何使用Spring Boot3与Vue2快速构建基于DeepSeek的AI对话系统。系统具备实时流式交互、Markdown内容渲染、前端安全防护等功能,采用响应式架构提升性能。后端以Spring Boot为核心,结合WebFlux和Lombok开发;前端使用Vue2配合WebSocket实现双向通信,并通过DOMPurify保障安全性。项目支持中文语义优化,API延迟低,成本可控,适合个人及企业应用。跟随教程,轻松开启AI应用开发之旅!
|
10月前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
396 6
|
10月前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
244 5
|
10月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
445 2