SpringBoot多文件上传

ops/2024/11/25 8:30:51/

多文件上传是在单文件上传的基础上修改而来,不了解单文件上传可以参考上一篇。以下在将修改部分展示如下:

一、修改upload.html文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>多文件上传页面</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile" value="请选择文件" multiple>
<input type="submit" value="上传">
</form>
</body>
</html>

二、修改控制器:

多文件上传的逻辑与单文件类似,只是其基础上接收部分多了文件数组,再遍历一回完成如下:

java">package org.sang.cc;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@RestController
public class FileUploadController {SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");@PostMapping("/upload")public String upload(MultipartFile[] uploadFile,HttpServletRequest req){try {//String realPath=req.getSession().getServletContext().getRealPath("/");String realPath=ResourceUtils.getURL("classpath:").getPath();		String format=sdf.format(new Date());System.out.println("realPath:"+realPath+"static/"+format);File folder=new File(realPath+"static/"+format);if(!folder.isDirectory()){folder.mkdirs();}String[] filePath=new String[uploadFile.length];String s="";for(int i=0;i<uploadFile.length;i++){String oldName=uploadFile[i].getOriginalFilename();String newName=UUID.randomUUID().toString()+oldName.substring(oldName.lastIndexOf("."),oldName.length());uploadFile[i].transferTo(new File(folder,newName));				filePath[i]=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/static/"+format+"/"+newName;				s+=filePath[i]+"   <br>";}	return s;}catch(IOException e){e.printStackTrace();}return "上传失败!";}
}

三、运行结果:

上传页

接收页

展示页


http://www.ppmy.cn/ops/136519.html

相关文章

Selenium + 数据驱动测试:从入门到实战!

引言 在软件测试中&#xff0c;测试数据的多样性和灵活性对测试覆盖率至关重要。而数据驱动测试&#xff08;Data-Driven Testing&#xff09;通过将测试逻辑与数据分离&#xff0c;极大地提高了测试用例的可维护性和可扩展性。本文将结合Selenium这一流行的测试工具&#xff0…

计算机的错误计算(一百六十四)

摘要 探讨 MATLAB 中 函数的计算精度问题。 例1. 考虑在许多应用中出现的函数 计算 直接贴图吧&#xff1a; 从上图可知&#xff0c;MATLAB的输出为 0.999200722162641 . 然而&#xff0c;事实上&#xff0c;16位的正确结果为 0.1000000000000045e1&#xff08;ISReals…

什么是Git,有什么特点

版本控制工具Git简介 一、Git的由来 Git 是一种分布式版本控制系统&#xff0c;由 Linux 之父 Linus Torvalds 于 2005 年创建。当时&#xff0c;Linux 内核开发团队需要一个高效的版本控制系统来管理庞大的代码库。在此之前&#xff0c;他们使用的是 BitKeeper&#xff0c;这…

Dubbo源码解析-服务订阅与发现(八)

一、服务订阅与发现 服务提供者暴漏服务的时候会向注册中心注册服务信息&#xff0c;当服务消费者引入服务的时候会去订阅服务提供者信息。RegistryDirectory#subscribe public void subscribe(URL url) {setSubscribeUrl(url);consumerConfigurationListener.addNotifyListe…

SQL注入--布尔盲注--理论

布尔盲注的原理 在SQL注入时&#xff0c;我们查询的数据不会直接回显在界面上&#xff0c;且界面对正确的查询和错误的查询有不同的回显&#xff0c;我们就可以使用布尔盲注。 比如sqli-labs的第八题&#xff0c;当我们输入的查询语句是正确的时候&#xff0c;回显就是you ar…

ftdi_sio应用学习笔记 5 - SPI

目录 1. 查找设备 2. 打开设备 3. 验证 3.1 遍历设备 3.2 打开关闭设备 3.3 读flash id SPI的SCK/MOSI/MISO分别对应&#xff08;A/B)D0/D1/D2&#xff0c;其他IO作为CS。和I2C一样&#xff0c;最大支持2路MPSSE通道&#xff0c;一路MPSSE最大13路SPI。 #define FTDI_DE…

Perforce《2024游戏技术现状报告》Part3:生成式AI、版本控制、CI/CD等游戏技术的未来趋势与应用

游戏开发者一直处于创新前沿。他们的实践、工具和技术受到各行各业的广泛关注&#xff0c;正在改变着组织进行数字创作的方式。 近期&#xff0c;Perforce发布了《2024游戏技术现状报告》&#xff0c;通过收集来自游戏、媒体与娱乐、汽车和制造业等高增长行业的从业者、管理人…

二.LoadBalancer负载均衡服务调用(1)

1.spring-cloud-loadbalancer概述 (1)官网 2.客户端负载VS服务器端负载 loadbalancer本地负载均衡客户端VSNginx服务端负载均衡区别 Nginx是服务器端负载均衡,客户端所有请求都会交给nignx,然后由nginx实现转发请求,即负载均衡是由服务端实现的 loadbalancer本地负载均衡,在…