温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

SpringBoot+BootStrap多文件上传到本地的方法

发布时间:2022-03-25 09:13:40 来源:亿速云 阅读:160 作者:iii 栏目:开发技术

这篇文章主要介绍“SpringBoot+BootStrap多文件上传到本地的方法”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringBoot+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>

    关于“SpringBoot+BootStrap多文件上传到本地的方法”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注亿速云行业资讯频道,小编每天都会为大家更新不同的知识点。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI