SpringBoot上传⽂件到本服务器⽬录与jar包同级问题⽬录
前⾔
原因
实现
不要忘记
最后的封装
Follow up
前⾔
看标题好像很简单的样⼦,但是针对使⽤jar包发布SpringBoot项⽬就不⼀样了。
当你使⽤tomcat发布项⽬的时候,上传⽂件存放会变得⾮常简单,因为你可以随意操作项⽬路径下的资源。但是当你使⽤SpringBoot的jar包发布项⽬的时候,你会发现,你不能像以前⼀样操作⽂件了。当你使⽤File file = new File()的时候根本不知道这个路径怎么办。⽽且总不能很⼩的项⽬也给它构建⼀个⽂
件服务器吧。所以这次就来解决这样的问题。
不想知道细节的,可以直接跳转到最后封装的部分,⾥⾯有相应的实现。
原因
其实原因你也想的到,你⽆法对jar包⾥⾯的资源进⾏操作,⽽对于springboot项⽬来说,你只能读取⾥⾯的⽂件,只能使⽤InputStream。使⽤如下⽅式针对资源⽂件进⾏读取:
ClassPathResource classPathResource = new ClassPathResource("");
其中,这个a.txt存放在resources/static⽬录下
通过上述⽅式可以获取a中的内容
实现
因为我们⽆法操作jar包内容,所以我们只能将⽂件存放在别的位置,与jar包同级的⽬录是⼀个不错的选择。
⾸先获取根⽬录
File path = new URL("classpath:").getPath());
if(!ists()) {
path = new File("");
}
然后获取需要的⽬录,我们设定我们需要将⽂件存放在与jar包同级的static的upload⽬录下
File upload = new AbsolutePath(),"static/upload/");
if(!ists()) {
upload.mkdirs();
}
然后当我们要将上传的⽂件存储的时候,按照下⾯的⽅式去新建⽂件,然后使⽤你喜欢的⽅式进⾏存储就可以了。
File upload = new AbsolutePath(),"static/upload/test.jpg");
不要忘记
你需要在l配置中加⼊以下代码,指定两个静态资源的⽬录,这样你上传的⽂件就能被外部访问到了。
spring:
# 静态资源路径
resources:
static-locations: classpath:static/,file:static/
这样就能实现上传⽂件
最后的封装
⼯具类:
这个⼯具类依赖了
compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.3.1'mysql的jar包下载
compile group: 'commons-io', name: 'commons-io', version: '2.4'
如何你不喜欢完全可以根据⾃⼰的喜欢改变
如何使⽤:
/**
* 测试⽂件上传
*/
@RequestMapping("/upload")
@ResponseBody
public String upload(MultipartFile file) throws IOException {
return "⽂件存放路径为" + FileHandleUtil.InputStream(), "image/", OriginalFilename());
}
最后效果
Follow up
这个⼯具类只是实现了如何上传⽂件,⼊参也只有InputStream,后续如何你需要接⼊参数File或者加⼊⽂件名防重复等等,就由你来完成了。
总结
以上所述是⼩编给⼤家介绍的SpringBoot上传⽂件到本服务器⽬录与jar包同级问题,希望对⼤家有所帮助,如果⼤家有任何疑问欢迎给我留⾔,⼩编会及时回复⼤家的!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论