springboot 查看本地硬盘文件

springboot 项目中使用 html 作为前端页面,最终打包 jar 运行。
已实现上传文件到服务器 - 一般是pdf 文件。现在想要通过 a 标签显示文件列表用户点击后可以在浏览器查看文件。我的实现步骤是:

  1. yml 配置文件中设置环境变量
globalv:
  drawingpath: e:/drawingfiles/
  virtualpath: /drawing/**
  1. 为项目制作配置类
@Configuration
public class WebMvcConfigure implements WebMvcConfigurer {

    @Value("${globalv.virtualpath}")
    private String virtualpath;

    @Value("${globalv.drawingpath}")
    private String drawingpath;

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler(virtualpath).addResourceLocations("file:/" + drawingpath);
    }

    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers(new TomcatConnectorCustomizer() {
            @Override
            public void customize(Connector connector) {
                connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
                connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
            }
        });
        return factory;
    }
}
  1. 已经在本地目录 e:/drawingfiles/ 中放了几个文件用于测试
  2. 前端 html 页面通过 a 标签显示文件
    注意前面的 projname 是项目名称 - server.servlet.context-path 的值

    <a href="/projname/drawing/readme.txt" target="view_window"> 点我查看文件 </a>
  3. 项目运行后点击该 a 标签浏览器打开了一个新标签页,显示404。我哪里做的不对?或者是实现的方案不对?
阅读 1.8k
1 个回答

你试试:

        registry.addResourceHandler(virtualpath).addResourceLocations("file:" + drawingpath);

把 file:后面的 /去掉

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题