1、application.yml文件配置

 #  文件大小 MB必须大写
# maxFileSize 是单个文件大小
# maxRequestSize是设置总上传的数据大小
spring:
servlet:
multipart:
enabled: true
max-file-size: 20MB
max-request-size: 20MB

2、application-resources.yml配置(自定义属性)

 #文件上传路径
file:
filepath: O:/QMDownload/Hotfix2/

3、后台代码

(1)FileService.java:

 package com.sun123.springboot.service;

 import org.springframework.web.multipart.MultipartFile;

 import java.util.Map;

 public interface FileService {

     Map<String,Object> fileUpload(MultipartFile[] file);
}

(2)FileServiceImpl.java:

 package com.sun123.springboot.service.impl;

 import com.sun123.springboot.FileUtil;
import com.sun123.springboot.service.FileService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.PrintWriter;
import java.util.*; /**
* @ClassName FileServiceImpl
* @Description TODO
* @Date 2019/3/22 22:19
* @Version 1.0
*/
@Service
public class FileServiceImpl implements FileService {
private static Logger log= LoggerFactory.getLogger(FileServiceImpl.class); //文件上传路径 @Service包含@Component
@Value("${file.filepath}")
private String filepath;   
Map<String, Object> resultMap = new LinkedHashMap<String, Object>();
  //会将上传信息存入此处,根据需求自行调整
List<String> fileName =new ArrayList<String>(); //必须注入,不可以创建对象,否则配置文件引用的路径属性为null
@Autowired
FileUtil fileUtil; @Override
public Map<String, Object> fileUpload(MultipartFile[] file) { HttpServletRequest request = null;
HttpServletResponse response; resultMap.put("status", 400);
if(file!=null&&file.length>0){
//组合image名称,“;隔开”
// List<String> fileName =new ArrayList<String>();
PrintWriter out = null;
//图片上传 try {
for (int i = 0; i < file.length; i++) {
if (!file[i].isEmpty()) {
//上传文件,随机名称,","分号隔开
fileName.add(fileUtil.uploadImage(request, filepath+"upload/"+ fileUtil.formateString(new Date())+"/", file[i], true)+fileUtil.getOrigName()); }
}
//上传成功
if(fileName!=null&&fileName.size()>0){
System.out.println("上传成功!");
resultMap.put("images",fileName);
resultMap.put("status", 200);
resultMap.put("message", "上传成功!");
}else {
resultMap.put("status", 500);
resultMap.put("message", "上传失败!文件格式错误!");
}
} catch (Exception e) {
e.printStackTrace();
resultMap.put("status", 500);
resultMap.put("message", "上传异常!");
}
System.out.println("==========filename=========="+fileName); }else {
resultMap.put("status", 500);
resultMap.put("message", "没有检测到有效文件!");
}
return resultMap;
} }

(3)FileUtil.java:

 package com.sun123.springboot;

 import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date; /**
* Created by wangluming on 2018/5/24.
*/
@Component
public class FileUtil { // //文件上传路径
// @Value("${file.filepath}")
// private String filepath; //文件随机名称
private String origName; public String getOrigName() {
return origName;
} public void setOrigName(String origName) {
this.origName = origName;
} /**
*
* @param request
* @param path_deposit 新增目录名 支持多级不存在目录
* @param file 待文件
* @param isRandomName 是否要基于图片名称重新编排名称
* @return
*/
public String uploadImage(HttpServletRequest request, String path_deposit, MultipartFile file, boolean isRandomName) { //上传
try {
String[] typeImg={"gif","png","jpg","docx","doc","pdf"}; if(file!=null){
origName=file.getOriginalFilename();// 文件原名称
System.out.println("上传的文件原名称:"+origName);
// 判断文件类型
String type=origName.indexOf(".")!=-1?origName.substring(origName.lastIndexOf(".")+1, origName.length()):null;
if (type!=null) {
boolean booIsType=false;
for (int i = 0; i < typeImg.length; i++) {
if (typeImg[i].equals(type.toLowerCase())) {
booIsType=true;
}
}
//类型正确
if (booIsType) {
//存放图片文件的路径
//String path="O:\\QMDownload\\Hotfix\\";
//String path=filepath;
//System.out.print("文件上传的路径"+path);
//组合名称
//String fileSrc = path+path_deposit;
String fileSrc = path_deposit;
//是否随机名称
if(isRandomName){
//随机名规则:文件名+_CY+当前日期+8位随机数+文件后缀名
origName=origName.substring(0,origName.lastIndexOf("."))+"_CY"+formateString(new Date())+
MathUtil.getRandom620(8)+origName.substring(origName.lastIndexOf("."));
}
System.out.println("随机文件名:"+origName);
//判断是否存在目录
File targetFile=new File(fileSrc,origName);
if(!targetFile.exists()){
targetFile.getParentFile().mkdirs();//创建目录
} //上传
file.transferTo(targetFile);
//完整路径
System.out.println("完整路径:"+targetFile.getAbsolutePath());
return fileSrc;
}
}
}
return null;
}catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* 格式化日期并去掉”-“
* @param date
* @return
*/
public String formateString(Date date){
SimpleDateFormat dateFormater = new SimpleDateFormat("yyyy-MM-dd");
String list[] = dateFormater.format(date).split("-");
String result = "";
for (int i=0;i<list.length;i++) {
result += list[i];
}
return result;
}
}

(4)MathUtil.java:

 package com.sun123.springboot;

 import java.security.MessageDigest;
import java.util.Random; public class MathUtil {
/**
* 获取随机的数值。
* @param length 长度
* @return
*/
public static String getRandom620(Integer length){
String result = "";
Random rand = new Random();
int n = 20;
if(null != length && length > 0){
n = length;
}
boolean[] bool = new boolean[n];
int randInt = 0;
for(int i = 0; i < length ; i++) {
do {
randInt = rand.nextInt(n); }while(bool[randInt]); bool[randInt] = true;
result += randInt;
}
return result;
}
/**
* MD5 加密
* @param str
* @return
* @throws Exception
*/
public static String getMD5(String str) {
MessageDigest messageDigest = null;
try {
messageDigest = MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(str.getBytes("UTF-8"));
} catch (Exception e) {
//LoggerUtils.fmtError(MathUtil.class,e, "MD5转换异常!message:%s", e.getMessage());
} byte[] byteArray = messageDigest.digest();
StringBuffer md5StrBuff = new StringBuffer();
for (int i = 0; i < byteArray.length; i++) {
if (Integer.toHexString(0xFF & byteArray[i]).length() == 1)
md5StrBuff.append("0").append(Integer.toHexString(0xFF & byteArray[i]));
else
md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
}
return md5StrBuff.toString();
}
}

(5)FileController.java:

 package com.sun123.springboot.controller;

 import com.sun123.springboot.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile; import java.util.Map; /**
* @ClassName FileController
* @Description TODO
* @Date 2019/3/22 22:21
* @Version 1.0
*/
@Controller
@RequestMapping(value = "/upload")
public class FileController { @Autowired
private FileService fileService; @RequestMapping(value = "/UpLoadImage")
@ResponseBody
public Map<String,Object> fileUpload(@RequestParam("file") MultipartFile[] file) throws Exception {
Map<String, Object> fileUpload = fileService.fileUpload(file);
return fileUpload;
}
}

4、前台代码(bootstrap)

 <div class="container" th:fragment="fileupload">
<input id="uploadfile" type="file" class="file" multiple="multiple" name="file"/> </div> <script>
$("#uploadfile").fileinput({ language: 'zh', //设置语言 //uploadUrl: "http://127.0.0.1/testDemo/fileupload/upload.do", //上传的地址
uploadUrl: "/upload/UpLoadImage", //上传的地址 allowedFileExtensions: ['jpg', 'gif', 'png', 'docx', 'zip', 'txt'], //接收的文件后缀 //uploadExtraData:{"id": 1, "fileName":'123.mp3'},
showClose: false,//是否显示关闭按钮 uploadAsync: true, //默认异步上传 showUpload: true, //是否显示上传按钮 //showBrowse: true, //是否显示浏览按钮 showRemove: true, //显示移除按钮 showPreview: true, //是否显示预览 showCaption: false, //是否显示标题 browseClass: "btn btn-primary", //按钮样式 dropZoneEnabled: true, //是否显示拖拽区域 //previewFileType: ['docx'], //预览文件类型
//minImageWidth: 50, //图片的最小宽度 //minImageHeight: 50,//图片的最小高度 //maxImageWidth: 1000,//图片的最大宽度 //maxImageHeight: 1000,//图片的最大高度 maxFileSize:0,//单位为kb,如果为0表示不限制文件大小 //minFileCount: 0, maxFileCount: 10, //表示允许同时上传的最大文件个数 enctype: 'multipart/form-data', validateInitialCount: true, previewFileIcon: "<iclass='glyphicon glyphicon-king'></i>", msgFilesTooMany: "选择上传的文件数量({n}) 超过允许的最大数值{m}!", }).on("fileuploaded", function (event, data, previewId, index) { });
</script>

SpringBoot+BootStrap多文件上传到本地的更多相关文章

  1. laravel中的文件上传到本地+七牛云上传

    首先在filesystems.php 配置好上传的文件的目录起名为upload 在Storage/目录下面 目录下面的app/upload 如果没有这个文件会自动创建 这里的名字upload名字是跟控 ...

  2. SpringBoot项目实现文件上传和邮件发送

    前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...

  3. Springboot如何启用文件上传功能

    网上的文章在写 "springboot文件上传" 时,都让你加上模版引擎,我只想说,我用不上,加模版引擎,你是觉得我脑子坏了,还是觉得我拿不动刀了. springboot如何启用文 ...

  4. springboot+vue实现文件上传

    https://blog.csdn.net/mqingo/article/details/84869841 技术: 后端:springboot 前端框架:vue 数据库:mysql pom.xml: ...

  5. Springboot(九).多文件上传下载文件(并将url存入数据库表中)

    一.   文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...

  6. springboot升级导致文件上传自动配置/tmp目录问题解决

    1,..\web\src\main\resources\spring\web-men-applicationContext.xml 保留原有的bean配置 <bean id="mult ...

  7. bootstrap fileinput 文件上传

    最近因为项目需要研究了下bootstrap fileinput的使用,来记录下这几天的使用心得吧. 前台html页面的代码 <form role="form" id=&quo ...

  8. SpringBoot之KindEditor文件上传

    后端核心代码如下: package com.blog.springboot.controller; import java.io.BufferedOutputStream; import java.i ...

  9. SpringBoot: 6.文件上传(转)

    1.编写页面uploadFile.html <!DOCTYPE html> <html lang="en"> <head> <meta c ...

随机推荐

  1. Android MVP 架构一 View与Presenter

    View:主要负责界面的显示及跟数据无关的逻辑,比如设置控件的点击事件等 Presenter:主要负责View与Model的交互 Model:数据部分 ------- MVP的核心是: View层不持 ...

  2. Luogu2495[SDOI2011]消耗战

    题目描述 在一场战争中,战场由\(n\)岛屿和\(n-1\)个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为\(1\)的岛屿,而且他们已经没有足够多的能源维系战 ...

  3. ATPCS规则

    title: ATPCS规则 tags: ARM date: 2018-10-14 17:03:23 --- ATPCS规则 ARM指令集E004armproc.chm ATPCS介绍与使用.pdf ...

  4. 7、JPA-映射-双向一对多

    一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe; import javax.persisten ...

  5. python 线程(其他方法,队列,线程池,协程 greenlet模块 gevent模块)

    1.线程的其他方法 from threading import Thread,current_thread import time import threading def f1(n): time.s ...

  6. npm i 与 npm install之间的细小区别

    1.用npm i 安装的模块无法用npm uninstall卸载,需要用npm uninstall i命令 2.npm i 会帮助检测与当前node版本最匹配的npm包 版本号,并匹配出来相互依赖的n ...

  7. 打印流PrintStream

    打印流PrintStream PrintStream extends OutputStream 1.打印流的特点 只负责数据的输出,不负责数据的读取 与其他的流不同,打印流永远不会抛出IOExcept ...

  8. 华为平板安装APK,提示“该安装包未包含任何证书”

    有的平板上会有错误现象 打包时签名勾选v1即可.

  9. 【十一】jvm 性能调优工具之 jmap

    jvm 性能调优工具之 jmap 概述 命令jmap是一个多功能的命令.它可以生成 java 程序的 dump 文件, 也可以查看堆内对象示例的统计信息.查看 ClassLoader 的信息以及 fi ...

  10. GCC编译器原理(二)------编译原理一:ELF文件(2)

    四. ELF 文件格式分析 ELF文件(目标文件)格式主要四种: 可重定向文件: 文件保存着代码和适当的数据,用来和其他的目标文件一起来创建一个可执行文件或者是一个共享目标文件.(目标文件或者静态库文 ...