您现在的位置是:首页 > java技术交流java技术交流

springboot本地图片上传-上传图片到本地磁盘目录

上善若水2020-12-10 15:30:10【java技术交流】 2871人已围观

简介springboot结合layui实现图片上传功能,使用MultipartFiletransferTo()自带的方法实现本地上传图片,并设置addResourceHandlers实现图片回显功能。

springboot结合layui实现图片上传功能,使用MultipartFile transferTo()自带的方法实现本地上传图片,并设置addResourceHandlers实现图片回显功能。

1.前端layui js部分代码

 //普通图片上传
        var uploadInst = upload.render({
            elem: '#test1'
            , url: '/admin/upload/img?type=banner'
            , before: function (obj) {
                //预读本地文件示例,不支持ie8
                obj.preview(function (index, file, result) {
                    $('#demo1').attr('src', result); //图片链接(base64)
                });
            }
            , done: function (res) {
                //如果上传失败
                if (res.code > 0) {
                    return layer.msg(res.msg);
                }
                layer.msg('上传成功!');
                $("input[name='cover']").val(res.data.src)
                //上传成功
            }
            , error: function () {
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
                demoText.find('.demo-reload').on('click', function () {
                    uploadInst.upload();
                });
            }
        });

2.后台控制器

@Controller
class AdminUploadController {
    @PostMapping("admin/upload/img")
    @ResponseBody
    public Map<String, Object> img(@RequestParam(value = "file") MultipartFile file, @RequestParam String type) {
        type = StringUtils.isEmpty(type) ? "article" : type;
        String suffixName = UploadConstants.getSuffixName(file);
        //生成文件名称通用方法
        //创建文件
        String newFileName = type + "/" + UploadConstants.getNewFileName(suffixName);
        File destFile = new File(UploadConstants.BASE_PATH + type);
        if (!destFile.exists()) {
            destFile.mkdirs();
        }
        Map<String, Object> result = new HashMap<>();
        try {
            file.transferTo(new File(UploadConstants.BASE_PATH + newFileName));
            result.put("code", 0);
            result.put("msg", file.getOriginalFilename());
            result.put("data", Map.of("src", UploadConstants.ACCESS_PATH + newFileName));
        } catch (IOException e) {
            result.put("code", 500);
            result.put("title", "图片上传失败!" + e.getMessage());
        }
        return result;
    }
}

UploadConstants类

@Component
public class UploadConstants {
    public static String BASE_PATH = "E:/blog/upload/";
    public static String ACCESS_PATH = "/upload/";

    @Value("${upload.basePath}")
    public void setUploadBasePath(String basePath) {
        UploadConstants.BASE_PATH = basePath;
    }
    @Value("${upload.accessPath}")
    public void setUploadAccessPath(String accessPath) {
        UploadConstants.ACCESS_PATH = accessPath;
    }

    @Bean
    MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setLocation(UploadConstants.BASE_PATH);
        return factory.createMultipartConfig();
    }

    /**
     * @Description: 获取图片后缀
     * @Param: [file]
     * @return: java.lang.String
     * @date: 2019/8/24 15:27
     */
    public static String getSuffixName(MultipartFile file){
        String fileName = file.getOriginalFilename();
        return fileName.substring(fileName.lastIndexOf("."));
    }

    /**
     * @Description: 生成文件名称通用方法
     * @Param: [suffixName] 图片后缀
     * @return: java.lang.String
     * @date: 2019/8/24 15:29
     */
    public static String getNewFileName(String suffixName){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
        int random = new Random().nextInt(100);
        StringBuilder tempName = new StringBuilder();
        tempName.append(sdf.format(new Date())).append(random).append(suffixName);
        return tempName.toString();
    }
}

yam配置

upload:
  basePath: E:/blog/upload/
  accessPath: /upload/

3.总结

再图片上传时,如果配置的yml文件目录不存在,系统则会自动帮我创建,在上传主目录建立的子目录需要手动创建,否则无法上传。
上传的文件的扩展名需要手动分割字符串取扩展名,或许有专门的文件上传插件简化这一操作吧。
上传路径

Tags: springboot图片上传

很赞哦! (10)

文章评论

站点信息

  • 建站时间:2019-10-24
  • 网站程序:Thinkphp6 Layui
  • 文章统计247篇文章
  • 标签管理标签云
  • 统计数据cnzz统计
  • 微信公众号:扫描二维码,关注我们