阅读 460

SpringBoot使用虚拟路径解决文件上传无法访问问题

别人能做到的事,自己也可以做到⏱

前言

我们在使用SprinBboot进行文件上传时,会把文件上传到硬盘的指定路径中,此时我们想在客户端访问这个文件时,会出现404无法访问的情况,接下来就跟各位开发者分享下如何配置虚拟路径来解决文件无法访问的问题。

实现思路

  • 新增一个配置类继承于WebMvcConfigurerAdapter
  • 在yml文件中添加上传文件在硬盘中的真实路径和虚拟访问路径
  • 重写addResourceHandlers方法实现虚拟路径配置

实现过程

  • 在config包中添加virtualPathConfigAdapter类,重写addResourceHandlers方法
package com.lk.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import java.io.File;

@Configuration
public class virtualPathConfigAdapter extends WebMvcConfigurerAdapter {
    // 文件在硬盘中的路径
    @Value("${uploadFilePath}")
    private String uploadFilePath;
    // 虚拟访问的路径
    @Value("${virtualUploadPath}")
    private String virtualUploadPath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        /*
         * 此处配置的虚拟路径在内置tomcat生效,同时也在外部tomcat生效,外部tomcat使用时无需在配置文件中进行配置
         */
        registry.addResourceHandler(virtualUploadPath +"/**").addResourceLocations("file:"+ uploadFilePath + File.separator);
        //阿里云(映射路径去除盘符)
        //registry.addResourceHandler("/ueditor/image/**").addResourceLocations("/upload/image/");
        super.addResourceHandlers(registry);
    }
}


复制代码
  • application.yml中添加配置
# 真实文件存储路径 | 虚拟上传路径
uploadFilePath: "/Volumes/DataStorage/fileStorage/uploads"
virtualUploadPath: "/uploads"
复制代码

实现效果

硬盘中真实路径的文件

浏览器端通过url进行访问

写在最后

  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于掘金,如需转载请评论区留言💌
关注下面的标签,发现更多相似文章
评论