当前位置: 首页 > news >正文

Java高级 | 【实验六】Springboot文件上传和下载

隶属文章:Java高级 | (二十二)Java常用类库-CSDN博客

系列文章:Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客

                  Java高级 | 【实验二】Springboot 控制器类+相关注解知识-CSDN博客

                  Java高级 | 【实验三】Springboot 静态资源访问-CSDN博客

                  Java高级 | 【实验四】Springboot 获取前端数据与返回Json数据-CSDN博客

                  Java高级 | 【实验五】Spring boot+mybatis操作数据库-CSDN博客

目录

一、实现步骤

1、配置文件上传位置和大小限制

2、创建文件上传表单页面

3、处理文件上传请求

4、提供文件下载接口

二、单文件上传

1、创建spring boot项目

2、修改文件上传的大小限制

3、创建前端页面

4、编写控制器

5、测试

(1)运行前端

(2)后端

三、多文件上传

1、在FileUpLoad类中增加如下方法

2、在FileController类中增加如下方法

3、在templates下创建一个名为“multFileUpload.html”的文件

4、测试

(1)前端 

 (2)后端

       文件上传是web开发中最常见的功能之一,比如用户注册时需要上传头像,添加上商品信息时需要上传图片等信息。

Spring Boot中文件上传非常简单,通常使用Spring MVC的MultipartFile类来处理文件上传。

一、实现步骤

Spring Boot中实现文件上传和下载通常遵循以下步骤:

1、配置文件上传位置和大小限制

首先,需要在Spring Boot应用的配置文件(如application.properties)中配置文件上传的位置和大小限制。

2、创建文件上传表单页面

 在前端创建一个包含文件上传表单的页面,通常使用HTML和表单标签来实现。表单中必须有一个input标签的type属性为file,用户通过这个输入框选择要上传的文件。

3、处理文件上传请求

在后端创建一个Controller来处理文件上传请求。这个Controller需要能够接收上传的文件,并将文件保存到指定的位置。在Spring Boot中,通常使用@RequestParam注解来接收MultipartFile对象,然后使用其transferTo()方法将文件保存到目标位置。

4、提供文件下载接口

创建另一个Controller来处理文件下载请求。这个Controller需要能够根据文件名或其他标识符找到对应的文件,并将其内容以流的形式返回给客户端。在Spring Boot中,你可以使用ResponseEntity来封装文件的响应,并设置适当的HTTP头部,使浏览器能够下载文件。

二、单文件上传

功能需求:

前端上传文件、文件名称和文件描述等相关信息。

后端获得前端上传的文件信息,并重新命名(新文件名称唯一)后保存到服务器指定的位置。

1、创建spring boot项目

如果新建项目, 注意勾选thymeleaf

这里直接使用实验一项目“springbootdemo1”,但要确保pom.xml文件中包含了Thymeleaf的依赖

//pom.xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

2、修改文件上传的大小限制

在application.properties文件输入如下代码:

spring.application.name=springbootdemo1
#file size
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB

3、创建前端页面

本项目的前端页面采用thymeleaf

在resources->templates文件夹中创建一个名为upload.html的文件。

upload.html文件的代码如下所示:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form method="POST" enctype="multipart/form-data" action="/upfile/upload">名称:<input type="text" name="title"/><br>描述:<input type="text" name="description"><br>文件:<input type="file" name="file"/><input type="submit" value="上传文件"/>
</form>
</body>
</html>

注意:确保upload.htm保存时使用的是UTF-8编码。如果文件保存时使用了其他编码(如GBK),可能会导致乱码。

4、编写控制器

本功能有两个控制器,FileController控制器用来运行前端,FileUpLoad 控制器用来保存上传的文件。

FileController控制器主要是控制前端页面:

package controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("test")
public class FileController {@RequestMapping("file")public String test1() {return "upload";}
}

FileUpLoad控制去主要是获得前端上传文件的相关信息,修改文件的名称,保存文件到指定的位置。

package controller;import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.UUID;
@RestController
@RequestMapping("upfile")
public class FileUpLoad {@PostMapping("/upload")public String handleFileUpload(@RequestParam("title") String title,@RequestParam("description") String description,@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {System.out.println(title+" : "+description);System.out.println(file.getOriginalFilename());//获得文件扩展名String originalFilename = file.getOriginalFilename();String fileType = originalFilename.substring(originalFilename.lastIndexOf("."));System.out.println("扩展名:"+fileType);//如果上传的文件为空if (file.isEmpty()) {return "Please select a file to upload.";}//获得动态的路径String path=request.getServletContext().getRealPath("/upload/");System.out.println(path);saveFile(file,path,fileType);return "文件上传成功!";}private void saveFile(MultipartFile file, String path,String fileType) throws IOException {//上传文件名重新命名,唯一,防止重复String originalFilename = file.getOriginalFilename();String newFilename = UUID.randomUUID().toString() + fileType;//新文件对象File dest = new File(path+ newFilename);//判断文件存放的目录,如果不存在就创建文件存放的目录。File dir=new File(path);if(!dir.exists()){dir.mkdir();}//文件上传file.transferTo(dest);}
}

启动spring boot项目。

5、测试

(1)运行前端

在浏览器的url中输入http://localhost:8080/test/file,回车,输入上传文件的相关信息后点击上传文件。

(2)后端

Springboot的控制台输出的相关信息

文件保存的位置:

C:\Users\xx\AppData\Local\Temp\tomcat-docbase.8080.2289647245401549388\upload\

文件浏览:

三、多文件上传

1、在FileUpLoad类中增加如下方法

@PostMapping("/multiFileUpload")public String MultipartFileUpload(@RequestParam("title") String title,@RequestParam("description") String description,@RequestPart("one") MultipartFile mf,@RequestPart("any") MultipartFile[] mfs,HttpServletRequest request) throws IOException{System.out.println("单文件上传信息为:"+mf.getOriginalFilename());System.out.println("多文件个数:"+mfs.length);for (MultipartFile m:mfs){System.out.println("多文件信息:文件名称:"+m.getOriginalFilename()+",文件大小:"+m.getSize()/1000+"kb");}/*将文件上传到指定文件夹*/if (!mf.isEmpty()){String fileName=mf.getOriginalFilename();//文件上传mf.transferTo(new File("E:\\upload"+fileName));}if (mfs.length>0){for (MultipartFile m: mfs) {m.transferTo(new File("E:\\multi_upload"+m.getOriginalFilename()));}}return "成功";}

2、在FileController类中增加如下方法

@RequestMapping("multi_file")public String test2() {return "multFileUpload";}

3、在templates下创建一个名为“multFileUpload.html”的文件

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><title>File Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form method="POST" enctype="multipart/form-data" action="/upfile/multiFileUpload">名称:<input type="text" name="title"/><br>描述:<input type="text" name="description"><br>单个文件: <input type="file" value="上传单个文件" name="one" ><p>多个文件 <input type="file" value="上传多个文件" name="any"  multiple><p><input type="submit" value="上传文件"/>
</form>
</body>
</html>

4、测试

测试路径:http://localhost:8080/test/multi_file 

(1)前端 

 

 (2)后端

 

相关文章:

  • 《递推》题集
  • 【C++进阶篇】C++11新特性(下篇)
  • OpenLayers 从后端服务加载 GeoJSON 数据
  • 基于Spring Boot的云音乐平台设计与实现
  • day26-计算机网络-4
  • 新时代AI发展,更好的做自己
  • 8.库制作与原理
  • DDPM优化目标公式推导
  • 【Java开发日记】说一说 SpringBoot 中 CommandLineRunner
  • 【强连通分量 缩点 最长路 拓扑排序】P2656 采蘑菇|普及+
  • 游戏常用运行库合集 | GRLPackage 游戏运行库!
  • 机器学习期末复习
  • Dynamics 365 Finance + Power Automate 自动化凭证审核
  • day029-Shell自动化编程-计算与while循环
  • SOC-ESP32S3部分:33-声学前端模型ESP-SR
  • ViiTor实时翻译 2.4.2 | 完全免费的同声传译软件 实测识别率非常高 可以识别视频生成字幕
  • [GitHub] 优秀开源项目
  • vue3 创建图标 按钮
  • 26N60-ASEMI工业电机控制专用26N60
  • string类型
  • 网站导航条/上海网站建设费用
  • 无限动力网站/面点培训学校哪里有
  • 做网站保定/刷神马seo排名首页排名
  • 政府网站开发报告/加入网络营销公司
  • 网站建站那个好/什么是网络营销平台
  • 什么网站可以做直播/建网站找谁