Loading...
墨滴

java后端指南

2021/04/11  阅读:67  主题:雁栖湖

springboot文件上传及虚拟路径设置

Part1文章首推

Part2今日主题:springboot文件上传及虚拟路径设置

1简介

相信大家在做项目中会遇到一些情况,比如文件上传,但是大家会发现他上次的目录是target目录下,也就是说,只要target目录没了,文件也就没了,这个是我们不想看到的,然后有些人就是直接将文件存到磁盘就好了啊,这个思路是没错的,但是我们在前端却不能直接引用磁盘里的真实路径的文件,因为这个存在安全问题,所以这个时候,我们就要用web服务器来帮我们做一个虚拟映射,我们访问一个虚拟路径,其实访问的就是本机的真实路径,这样保证了安全性。

2环境

  • springboot

3实现过程

1、首先我们需要建立一个springboot工程,依赖非常少只需要下面几个就行了

  <!--文件上传-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

2、创建一个非常简单的控制类

@RequestMapping("/upload")
    public R upload(@RequestParam("file") MultipartFile file){
        //使用UUID生成唯一标识
        String randomNumber = UUID.randomUUID().toString().replace("-""");
        //创建一个唯一标识作为评论的主键以及队伍的一个字段,方便用来保存数据将队伍与队伍描述建立起关系
        //获取文件的原始名
        String oldFilename = file.getOriginalFilename();
        //使用FilenameUtils获得文件的后缀(先导依赖Commons-fileUpload)
        String extension = FilenameUtils.getExtension(file.getOriginalFilename());
        //生成新的文件名(队伍名+随机数+后缀名)
        String newFileName = randomNumber + "." + extension;
        //使用ResourceUtils类路径再获取文件保存的路径

        File dateDir = new File(uploadFolder);
        if (!dateDir.exists()) {
            //判断目录是否存在,不存在则直接创建
            dateDir.mkdirs();
        }
        try {
            file.transferTo(new File(uploadFolder, newFileName));
        } catch (IOException e) {
            e.printStackTrace();
            return R.error("上传失败");
        }
        //上传完毕,存入数据库中的地址为:
        String invented_address="http://127.0.0.1:" + POST + "/api/file/" + newFileName;
        return R.ok("上传成功,虚拟路径为:"+invented_address);

    }

3.我们需要添加一个配置类

    @Value("${file.staticAccessPath}")
    private String staticAccessPath;
    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(staticAccessPath).addResourceLocations("file:" + uploadFolder);
    }

4、在yml文件中需要添加一些配置

###文件上传
file:
  ###静态资源对外暴露的访问路径
  staticAccessPath: /api/file/**
  ###静态资源实际存储路径
  uploadFolder: D:/static/teamImages/
  ###项目名
  servlet:
    context-path:
    ###文件上传
    multipart:
    enabled: true
    max-file-size: 10mb
    max-request-size: 10mb

5、需要写一个前端页面,来进行文件上传

我们可以在浏览器中直接访问该图片通过虚拟路径

回复:文件上传 获取demo


欢迎关注:java后端指南

java后端指南

2021/04/11  阅读:67  主题:雁栖湖

作者介绍

java后端指南

公众号:java后端指南