再次请教jfinal-undertow项目部署问题

在上传文件时,是否可以将上传目录设置在项目外部,做到和项目分离。同时在需要访问已上传文件时还可以访问到。不知道使用jfinal-undertow需要怎么实现,谢谢。

就像springboot中映射静态资源文件一样。

@Configuration
public class GoWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {        //配置静态资源处理
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/resources2/", "classpath:/static2/", 
                "classpath:/public2/", "file:///tmp/webapps/");
    }
}


评论区

JFinal

2019-05-10 16:10

在 configConstant(Constants me) 中配置 setBaseUploadPath(...) 即可,规则如下:

设置文件上传保存基础路径,当路径以 "/" 打头或是以 windows 磁盘盘符打头, 则将路径设置为绝对路径,否则路径将是以应用根路径为基础的相对路径
例如:
1:参数 "/var/www/upload" 为绝对路径,上传文件将保存到此路径之下
2:参数 "upload" 为相对路径,上传文件将保存到 PathKit.getWebRoot() + "/upload" 路径之下

此外,如果你又希望可以通过 web 能直接访问到这些上传的资源就更简单了,配置一下 undertow:
undertow.resourcePath=src/main/webapp, /var/www/upload

以上配置的 src/main/webapp 用于开发,当然你开发的时候 web 资源不在这里可以不需要,例如有些是将 web 资源放在 src/main/resources/static 下面的,可以这么配置:
undertow.resourcePath=classpath:static, /var/www/upload

以上两个 undertow.resourcePath 配置的第二个参数就是你希望在项目之外可以访问的 web 资源: /var/www/upload,可以配置多个,可以配置成与 setBaseUploadPath(...) 一样的值,极致方便

guanxb

2019-05-10 16:17

@JFinal 多谢波总解答,很清晰明白。
还有个问题,访问上传资源的方式是直接 http://host:port/var/www/upload 吗?可以映射虚拟路径,不暴露真实路径吗?
比如 /image/** -> /var/www/upload/image
/video/** -> /var/www/upload/video

JFinal

2019-05-10 16:24

@guanxb 通过上面的配置,本身就是隐藏具体路径的,只会暴露你的 web 项目路径

此外,这些配置全放在外部配置文件中,通过 PropKit 来加载,方便生产环境与开发环境协同

guanxb

2019-05-10 16:26

@JFinal 明白了,谢谢

三晋一枝花

2024-03-15 08:39

经过测试,发现这个方式确实类似于虚拟路径的映射。
不同的是:虚拟路径的映射增加了一个前缀,如:prefix,而这个不需要增加前缀,就相当于是访问webapp下的一个目录。
但前提是,这个目录不能与webapp下的目录同名,否则,他会优先去查找webapp下的内容。

热门反馈

扫码入社