美文网首页springboot 组件spingboot编程测试
用SpringBoot实现一个简单的文件服务器

用SpringBoot实现一个简单的文件服务器

作者: 程序员札记 | 来源:发表于2021-12-27 19:44 被阅读0次

    要实现一个简单的文件系统,需求只是有个前端网页可以查看文件目录和文件内容,那其实nginx和tomcat简单配置后都可以实现,但是如果需要用SpringBoot来实现类似的功能要如何来做呢?

    需求

    1. 处理静态资源
    2. Url能匹配到相应的文件和目录
    3. 能有UI展示目录和文件

    处理静态资源

    在创建一个新的SpringBoot项目后,实现WebMvcConfigurer接口,同时在addInterceptors中添加拦截器处理请求的URL,addResourceHandlers中设置静态资源路径,下图中的resourceLocation和pathPattern分别是file:${user.home}/static/和/* * ,这里以/home/static为文件系统的根目录,而/ * *则表示匹配所有的url pattern

    WebMvcConfigurer

    Url能匹配到相应的文件和目录

    上面已经配置好了WebMvcConfigurer,现在来看看拦截器如何处理和匹配请求的URL,在拦截器中,获取网络请求中的URI,假如请求URL为 https://www.example.com/my/folder/,获取request的URI,那这里URI就为/my/folder/,此时根据resourceLocation的值加上URI(当前本文中路该值为/home/static),则为/home/static/my/folder/,获取磁盘中的文件或文件夹,判断如果磁盘中存在该文件,如果为文件夹(directory)那就将请求转发到自定义的Controller中(下文会讲解该Controller的作用),如果不为文件夹(directory)则返回true由SpringBoot的Resource Handler来处理,此时如果能匹配到静态文件,则会返回文件流,如果没有则会去匹配是否有存在的Controller,这里我们则不需要关心了。

    FSInterceptor

    UI展示目录和文件

    下图为上文提到的index Controller,当请求URI匹配到文件夹目录时,转发至此,Controller中的主要逻辑为获取该文件夹下所有文件的信息,比如是否为文件夹,文件名,文件大小等等,同时将信息传入前端html模板中。

    controller

    下图为index.html thymleaf模板


    index.html

    运行后的前端网页实例


    image.png

    相关文章

      网友评论

        本文标题:用SpringBoot实现一个简单的文件服务器

        本文链接:https://www.haomeiwen.com/subject/dpaafrtx.html