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

SpringBoot多文件上传

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

一、修改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>

二、修改控制器:

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

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.lryc.cn/news/490577.html

相关文章:

  • MyBatis-数据库连接池、属性文件config.properties、类名简化、MyBatis的整体架构
  • Flink-Source的使用
  • C0031.在Clion中使用mingw编译器来编译opencv的配置方法
  • Android——连接MySQL(Java版)
  • 「四」体验HarmonyOS端云一体化开发模板——工程目录结构与云侧工程一键部署AGC云端
  • Kotlin:后端开发的新宠
  • SSM全家桶 1.Maven
  • SpringBoot 集成 html2Pdf
  • 利用 Watchtower 自动监听并更新正在运行的 Docker 容器
  • Nodejs开发仿马蜂窝旅游小程序API接口,服务器端开发,商家后台 Vue3+微信小程序+koa+mongodb+node.js
  • 极限失控的大模型使电力系统面临的跨域攻击风险及应对措施
  • mybatis-plus方法无效且字段映射失败错误排查
  • librdns一个开源DNS解析库
  • Unity3D 逻辑服的Entity, ComponentData与System划分详解
  • 跟《经济学人》学英文:2024年11月23日这期 Why British MPs should vote for assisted dying
  • 基于阿里云服务器部署静态的website
  • 【2024 Optimal Control 16-745】Ubuntu22.04 安装Julia
  • nuget默认包管理格式:packages.config、packageReference区别
  • element-plus教程:Input Number 数字输入框
  • M|横道世之介
  • 借助算力云跑模型
  • LlamaIndex+本地部署InternLM实践
  • 3.12MayBeSomeJava
  • 设计模式之 命令模式
  • 24.11.23 Ajax
  • Sickos1.1 详细靶机思路 实操笔记
  • rk3568-linux-5.10.160移植rtl8822cs wifi 模块纪要
  • QT基础 编码问题 定时器 事件 绘图事件 keyPressEvent QT5.12.3环境 C++实现
  • 学习electron
  • 《C++智能合约与区块链底层交互全解析:构建坚实的去中心化应用桥梁》