SpringBoot+BootStrap多文件上传到本地实例

目录
  • 1、application.yml文件配置
  • 2、application-resources.yml配置(自定义属性)
  • 3、后台代码
    • (1)FileService.java
    • (2)FileServiceImpl.java
    • (3)FileUtil.java
    • (4)MathUtil.java
    • (5)FileController.java
  • 4、前台代码(bootstrap)

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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Spring Boot搭建文件上传服务的方法

    本文实例为大家分享了Spring Boot搭建文件上传服务的具体代码,供大家参考,具体内容如下 一.服务端 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http:/

  • SpringBoot整合BootStrap实战

    目录 SpringBoot整合BootStarp 1.Pom文件 2.在resource下创建一个l文件路径:statis/webjars 3.将页面放在src/main/webapp/WEB-INF/views下 4.界面添加以下几行 5.application.yml配置文件中 6. Controller 注意 因为我显示的是jsp SpringBoot整合BootStarp 一开始在将BootStrap整合到项目中时,以为SpringBoot项目和以前的javaWeb一样,直接在页面中引用

  • bootstrap fileinput组件整合Springmvc上传图片到本地磁盘

    整合前的准备步骤 1.搭建好基础框架,本文用的是SSM(Spring+SpringMVC+Mybatis),这里的过程就不在本文中讲了,之前我做个一个demo(ssm整合+用户模块),可以参考这个搭建好. 2.下载bootstrap fileinput组件源码: https://github.com/kartik-v/bootstrap-fileinput/ 搭建后的效果图 图1. 图2. 图3. 图4. 图5. 在需要编写的jsp页面引入组件 本工程的路径界面如下: 在jsp引入组件需要的js

  • spring MVC + bootstrap实现文件上传示例(带进度条)

    最近学习了bootstrap,有结合了spring MVC写了个文件上传的示例,留做笔记,废话不多说,直接上代码 监听器类FileUploadProgressListener.Java package com.gpl.web.listener; import javax.servlet.http.HttpSession; import org.apache.commons.fileupload.ProgressListener; import org.springframework.stereo

  • SpringBoot+BootStrap多文件上传到本地实例

    目录 1.application.yml文件配置 2.application-resources.yml配置(自定义属性) 3.后台代码 (1)FileService.java (2)FileServiceImpl.java (3)FileUtil.java (4)MathUtil.java (5)FileController.java 4.前台代码(bootstrap) 1.application.yml文件配置 # 文件大小 MB必须大写 # maxFileSize 是单个文件大小 # ma

  • SpringBoot+layui实现文件上传功能

    什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.用我的话来理解,就是spring boot其实不是什么新的框架,它默认配置了很多框架的使用方式,就像maven整合了所有的jar包,spring boot整合了所有的框架(不知道这样比喻是否合适). 页面代码(只需要引入基础layui的css与js) <fieldset c

  • SpringBoot简单实现文件上传

    目录 1.创建SpringBoot项目 2.修改application.properties配置文件 3.编写控制器UserController类 4.编写前端页面index.html 5.效果展示 前言: 这里给大家介绍如何在SpringBoot项目中实现文件上传功能! 1.创建SpringBoot项目 打开IDEA,点击文件,选择新建项目,点击Spring Initializr,然后根据自己的需求设置项目名称,位置以及JDK.这里需要注意,服务器的URL最好设置为阿里云服务器,这样可以使得项

  • Bootstrap fileinput文件上传组件使用详解

    一.使用方法 1.导入依赖的js和css文件: <link rel="stylesheet" href="css/bootstrap.min.css" /> <link rel="stylesheet" href="css/fileinput.min.css" /> <script type="text/javascript" src="js/jquery-3.2.1

  • BootStrap实现文件上传并带有进度条效果

    1.做了一天终于做出来了,在上传成功之后,可以将路径添加到数据库,因为一直在烦恼如何在上传成功之后在将路径添加到数据库,终于弄出来了,太开心了,不得不说bootstrap的强大,之前说ajax不能上传文件,之后想办法,用js写,更改了上传文件按钮的样式,但是没想到bootstrap真的太厉害了,样式还不错,可以预览,图片,限制文件的大小,格式等等,还有进度条. 后台的代码在之前写过了 这只有前台的代码 记得:在验证的时候,尽量用控制台来验证,有的时候你的代码写对了,但是有可能alert不显示 c

  • Bootstrap Fileinput文件上传组件用法详解

    最近时间空余,总结了一些关于bootstrap fileinput组件的一些常见用法,特此分享到我们平台,供大家参考,同时也方便以后的查找.本文写的不好还请见谅. 一.效果展示 1.原始的input type='file',简直不忍直视. 2.不做任何装饰的bootstrap fileinput:(bootstrap fileinput初级进化) 3.bootstrap fileinput高级进化:中文化.可拖拽上传.文件扩展名校验(如果不是需要的文件,不让上传) 拖拽上传 上传中 4.boot

  • SpringBoot后台实现文件上传下载

    SpringBoot后台如何实现文件上传下载? 最近做的一个项目涉及到文件上传与下载.前端上传采用百度webUploader插件.有关该插件的使用方法还在研究中,日后整理再记录.本文主要介绍SpringBoot后台对文件上传与下载的处理. 单文件上传 // 单文件上传 @RequestMapping(value = "/upload") @ResponseBody public String upload(@RequestParam("file") Multipar

  • SpringBoot实现单文件上传

    SpringBoot实现单文件上传功能,供大家参考,具体内容如下 架构为springboot+thymeleaf,采用ajax方式提交 1. 页面testFile.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>测试文件上传</title> <script src="../static/jquery/jquery-2.

  • springboot实现多文件上传功能

    本文实现springboot的多文件上传,首先创建一个springboot项目,添加spring-boot-starter-web依赖. 然后在resources下的static文件夹下创建uploads.html文件,文件内容如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>多文件上传</title&g

  • springboot+vue实现文件上传下载

    本文实例为大家分享了springboot+vue实现文件上传下载的具体代码,供大家参考,具体内容如下 一.文件上传(基于axios的简单上传) 所使用的技术:axios.springboot.vue; 实现思路:通过h5 :input元素标签进行选择文件,获取所选选择的文件路径,new fromdata对象,设置fromdata的参数,设置axios对应的请求头,最后通过axios发送post请求后端服务.后端服务同过MultipartFile进行文件接收.具体代码如下: 前端代码: 1.创建v

随机推荐