jfinal如何实现文件上传到非工程目录下并可以访问

陈俊凯 发布于 03/24 15:56
阅读 675
收藏 2

jfinal图片上传到工程之外的文件夹后,怎么在浏览器访问该图片?就像springboot的static-locations那样可以配置静态资源目录?数据库里保存图片的相对路径,浏览器中只要访问该路径即可展现对应的图片?

主要是考虑到静态文件与应用的分离部署

加载中
1
JFinal
JFinal

在 configConstant 方法中通过 constants.setBaseUploadPath(...) 即可实现,如果希望上传到项目之外的目录,用一下绝对路径就可以: 

1:linxu 系统示例 constants.setBaseUploadPath("/var/pic");

2:windows 系统示例 constants.setBaseUploadPath("d:/data/pic");

陈俊凯
陈俊凯
回复 @JFinal : 嗯嗯,好的,明白了
JFinal
JFinal
回复 @陈俊凯 : 为 png、jpg 这些资源提供访问的是 tomcat、jetty、nginx 之类的服务,建议配置一下 nginx 指向相关的路径。或者在 jfinal 中添加一个 handler 来处理一下
陈俊凯
陈俊凯
现在图片已经传到工程之外的目录下,路径是C:\you_tie\upload\backend\site\20180325163210538000.png,baseUploadPath是C:/you_tie/upload/,浏览器访问http://localhost:8080/backend/site/20180325163210538000.png,还是报404错误。
0
探索人生
探索人生

详见:Java访问硬盘,文件操作 貌似跟Jfinal没关系

陈俊凯
陈俊凯
我说的是,在浏览器中打开上传到非工程目录下的图片
0
蓝水晶飞机
蓝水晶飞机

springboot 你都会了?

陈俊凯
陈俊凯
。。。。。。。。。。。。。。。。。。
0
蓝水晶飞机
蓝水晶飞机

调用接口示例:www.example.com/cms/images?f=xxx.jpg

 

后端:

配置你的 Controller,写一个Service,查询数据库 xxx.jpg 是否存在,存在则读取硬盘上面的文件,response.getOutputStream().write(bytes)

蓝水晶飞机
蓝水晶飞机
也可以暴力一点,不去查数据库的文件是否存在。不过这有点危险存在,自己要处理好文件名不能包含/或\等特殊字符,他们会导致安全问题。
陈俊凯
陈俊凯
你的意思是在handler里对请求的key进行判断,如果是图片就用流写给浏览器?我想过,我试试吧
0
会哭的鳄鱼
会哭的鳄鱼
在config里配置一下上传的路径,之后在你的controller里去对应路径读图片就行的
0
CapJes
CapJes
还有一种办法,就是使用nginx
陈俊凯
陈俊凯
嗯嗯,这是备选方案了
返回顶部
顶部