SpringBoot上传的文件不能访问怎么办 ?SpringBo

2019-08-17  本文已影响0人  d37b9e569e06

最近写项目遇到一个需求就是要使用springboot上传文件,但有个问题,因为springboot内置tomcat,然后上传的文件就别放到了临时目录下面,这样文件很不安全也不符合业务应有的情况。

一般情况springboot直接打包成jar运行,我们上传的文件有不能放到jar包里面吧。

看了好多博客,终于尝试成功,现在记录一下:

在springboot中默认的静态资源路径有:classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ (都带有classpath,也就是在项目路径下的几个文件夹)

上传文件最好的方式是文件 和 项目分离,将静态资源文件放到磁盘的某个目录下面:

划重点,开始配置了

第一步:在application.properties中增加配置项,如下:
# 自定义配置项
web.upload-path=/home/file

spring.mvc.static-path-pattern=/**
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,\
  classpath:/static/,classpath:/public/,file:${web.upload-path}

web.upload-path这个属于自定义的属性,指定了一个路径,注意要以/结尾;

spring.mvc.static-path-pattern=/**表示所有的访问都经过静态资源路径;

spring.resources.static-locations在这里配置静态资源路径,前面说了这里的配置是覆盖默认配置,所以需要将默认的也加上,否则static、public等这些路径将不能被当作静态资源路径,在这里的最末尾加上file:${web.upload-path}。之所以要加file:是因为要在这里指定一个具体的硬盘路径,其他的使用classpath指定的是系统环境变量;

第二步: 在上传文件的时候,代码中写文件的位置的时候指定为咱配置的路径

例如:下面上传文件的代码中我指定了问价存储路径为配置中的/home/file

@RequestMapping(value = "/upload",method = RequestMethod.POST)
    public ResponseBean upload(@RequestParam("file") MultipartFile file, HttpServletRequest request){
        try {
            if (file.isEmpty()){
                System.out.println("文件为空...");
            }
            // 获取文件名称
            String fileName = file.getOriginalFilename();
            System.out.println("上传的文件名称为:" + fileName);
            //获取文件名称的后缀
            String suffixName = fileName.substring(fileName.lastIndexOf("."));
            System.out.println("文件的后缀为:" + suffixName);
            //设置文件存储路径
            String filePath = "/home/file/";
            String path = filePath + fileName;
            System.out.println(path);
            File dest = new File(path);
            //检测目录是否存在
            if (!dest.getParentFile().exists()){
                dest.getParentFile().mkdirs();
            }
            file.transferTo(dest);
            System.out.println("文件上传成功!");
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

配置好了

接下来 你通过代码上传一个文件,例如上传了图片 a.jpg

然后在浏览器中访问一下试试:
http://localhost:端口号/a.jpg


今天的新闻联播播放完成了,感谢观看!!!

上一篇 下一篇

猜你喜欢

热点阅读