侧边栏壁纸
博主头像
神奇的程序员

今天的努力只为未来

  • 累计撰写 170 篇文章
  • 累计创建 27 个标签
  • 累计收到 225 条评论

目 录CONTENT

文章目录

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

神奇的程序员
2020-01-21 / 0 评论 / 1 点赞 / 594 阅读 / 1,435 字 正在检测是否收录...

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

前言

我们在使用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进行访问

1

评论区