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

2021-05-13 17:02:45 浏览数 (2)

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

简介

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

环境

  • springboot

实现过程

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

代码语言:javascript复制
  <!--文件上传-->
        <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、创建一个非常简单的控制类

代码语言:javascript复制
@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.我们需要添加一个配置类

代码语言:javascript复制
    @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文件中需要添加一些配置

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

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

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

0 人点赞