前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >springboot文件上传及虚拟路径设置

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

作者头像
java后端指南
发布2021-05-13 17:02:45
1.7K0
发布2021-05-13 17:02:45
举报
文章被收录于专栏:java后端

今日主题: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、需要写一个前端页面,来进行文件上传

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 java后端指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 今日主题:springboot文件上传及虚拟路径设置
    • 简介
      • 环境
        • 实现过程
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档