如何在SpringBoot当中上传多个图片或者上传单个图片 工具类
如何在SpringBoot当中上传多个图片【上传多个图片 】 附赠工具类
1.SpringBoot 上传图片工具类
public class SpringUploadUtil {
/***
* 上传图片后返回文件名称用于存储数据库
* @author MRC
* @date 2019年4月8日上午11:22:54
* @return
*/
public static String uploadPics(List<MultipartFile> file){
int index = 0;
StringBuffer sb = new StringBuffer();
for (MultipartFile multipartFile : file) {
if (file.isEmpty()) {
continue;
}
try {
//工具类生成文件名
String fileName = FileCreateNameUtils.toCreateName();
//获取文件后缀名
String fileType = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().indexOf("."));
File f = new File("D:\\upload\\"+fileName+fileType);
if (f.exists()) {
//判断这个文件是否存在,若存在则变换文件名 防止覆盖
fileName = FileCreateNameUtils.toCreateName();
}
byte[] bytes = multipartFile.getBytes();
Path path = Paths.get("upload/" + fileName+fileType);
//写入磁盘
Files.write(path, bytes);
sb.append(StaticUtils.UPLOAD+fileName+fileType);
index++;
if (file.size() != index ) {
sb.append(",");
}
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
经过工具类图片上传后,返回的字符串是用逗号分隔的图片上传后的路径!
举个栗子: upload/2019041615094470712493.jpg,upload/2019041615094470712456.jpg
**注明 文件名生成的工具类 按照时间戳和随机字符串生成文件的名字
public class FileCreateNameUtils {
public static final String numberChar = "0123456789";
/***
* 文件名生成工具类
*/
public static String toCreateName() {
return getNowDatetoString() + generateNum(10);
}
/***
* 生成日期字符串 yyyyMMddHHmm
*
* @author MRC
* @date 2019年4月16日下午2:19:37
* @return
*/
public static String getNowDatetoString() {
Date currentTime = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmm");
String dateString = formatter.format(currentTime);
return dateString;
}
/***
* 生成随机数
* @author MRC
* @date 2019年4月16日下午2:21:06
* @param len
* @return
*/
public static String generateNum(int len) {
StringBuffer sb = new StringBuffer();
Random random = new Random();
for (int i = 0; i < len; i++) {
sb.append(numberChar.charAt(random.nextInt(numberChar.length())));
}
return sb.toString();
}
2.在Controller层调用上传图片方法
@PostMapping("orderComment")
@ResponseBody
public Map<String, Object> orderComment(HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
// 从前台的请求当中取出 file文件类型
List<MultipartFile> list = ((MultipartHttpServletRequest)request).getFiles("file");
String pics = null;
if (list.size() != 0) {
//上传图片 调用工具类上传 返回上传后文件的名字
pics = SpringUploadUtil.uploadPics(list);
}
// pics = "upload/2019041615094470712493.jpg,upload/2019041615094470712456.jpg"
}
上传后返回 图片路径拼接的字符串 使用英文状态下(,)分隔
3.前台上传部分代码示例
<html>
<body>
<h1>Spring Boot file upload example</h1>
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" /><br/><br/>
<input type="file" name="file" /><br/><br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
4.参考博客:https://www.cnblogs.com/ityouknow/p/8298344.html
如何在SpringBoot当中上传多个图片或者上传单个图片 工具类的更多相关文章
- SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)
在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...
- Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- .net 实现上传文件分割,断点续传上传文件
一 介绍 断点续传搜索大部分都是下载的断点续传,涉及到HTTP协议1.1的Range和Content-Range头. 来个简单的介绍 所谓断点续传,也就是要从文件已经下载的地方开始继续下载.在以前版本 ...
- 微信JSSDK多图片上传并且解决IOS系统上传一直加载的问题
微信多图片上传必须挨个上传,也就是不能并行,得串行: 那么我们可以定义一个如下所示的上传函数: var serverIds = []; function uploadImages(localImage ...
- 用git上传本地项目到github上
首先确认自己已经安装了git,打开git bash,输入ssh-keygen -t rsa -C "自己的邮箱地址@XXX.com" ,生成自己的公钥与私钥 一路默认回车,会生 ...
- SharePoint 2010 ——自定义上传页面与多文件上传解决方案
最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...
- 图片上传并显示(兼容ie),图片大小判断
图片上传并显示(兼容ie),图片大小判断 HTML <div id="swf" style="margin: 0 auto;text-align: center;& ...
- [上传下载] C#FileUp文件上传类 (转载)
点击下载 FileUp.zip 主要功能如下 .把上传的文件转换为字节数组 .流转化为字节数组 .上传文件根据FileUpload控件上传 .把Byte流上传到指定目录并保存为文件 看下面代码吧 // ...
- bootstrap上传表单的时候上传的数据默认是0 一定要小心
bootstrap上传表单的时候上传的数据默认是0 一定要小心
随机推荐
- TypeScript在react项目中的实践
前段时间有写过一个TypeScript在node项目中的实践. 在里边有解释了为什么要使用TS,以及在Node中的一个项目结构是怎样的. 但是那仅仅是一个纯接口项目,碰巧赶上近期的另一个项目重构也由我 ...
- localStorage H5本地存储
域内安全.永久保存.即客户端或浏览器中来自同一域名的所有页面都可访问localStorage数据且数据除了删除否则永久保存,但客户端或浏览器之间的数据相互独立. <!doctype html&g ...
- Centos 6.4搭建git服务器【转】
前阵子公司需要,让我搭个Git服务器,把之前用的SVN上代码迁移到git上去,所以就在阿里云主机上搭了一个,记录了下安装过程,留存文档以备查阅.本篇本章只涉及搭建部分的操作,更多git的使用可以参考文 ...
- Ural Sport Programming Championship 2015
Ural Sport Programming Championship 2015 A - The First Day at School 题目描述:给出课程安排,打印一个课程表. solution 暴 ...
- Python 中的闭包与装饰器
闭包(closure)是函数式编程的重要的语法结构.闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性. 如果在一个内嵌函数里,对在外部函数内(但不是在全局作用域)的变量进行引用,那么内嵌函数 ...
- Groovy 与 DSL
一:DSL 概念 指的是用于一个特定领域的语言(功能领域.业务领域).在这个给出的概念中有 3个重点: 只用于一个特定领域,而非所有通用领域,比如 Java / C++就是用于通用领域,而不可被称为 ...
- PHP 权威代码风格规范
1.常规 尽量统一ide 比如phpstream 配置文件(Settings → Code Style → PHP → Set from... → Predefined Style → PSR1/PS ...
- 【PAT】1014. 福尔摩斯的约会 (20)
1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...
- 【转】django 与 vue 的完美结合 实现前后端的分离开发之后在整合
https://blog.csdn.net/guan__ye/article/details/80451318 最近接到一个任务,就是用django后端,前段用vue,做一个普通的简单系统,我就是 ...
- JS 汉字与Unicode码的相互转化
js文件中,有些变量的值可能会含有汉字,画面引入js以后,有可能会因为字符集的原因,把里面的汉字都变成乱码.后来发现网上的一些js里会把变量中的汉字都表示成”\u“开头的16进制编码,这样应该可以解决 ...