电商网站设计系列,网络游戏代理平台,王烨洛阳,六安网站开发前言 看标题好像很简单的样子#xff0c;但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候#xff0c;上传文件存放会变得非常简单#xff0c;因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候#xff0c;…前言 看标题好像很简单的样子但是针对使用jar包发布SpringBoot项目就不一样了。 当你使用tomcat发布项目的时候上传文件存放会变得非常简单因为你可以随意操作项目路径下的资源。但是当你使用SpringBoot的jar包发布项目的时候你会发现你不能像以前一样操作文件了。当你使用File file new File()的时候根本不知道这个路径怎么办。而且总不能很小的项目也给它构建一个文件服务器吧。所以这次就来解决这样的问题。 不想知道细节的可以直接跳转到最后封装的部分里面有相应的实现。 原因 其实原因你也想的到你无法对jar包里面的资源进行操作而对于springboot项目来说你只能读取里面的文件只能使用InputStream。使用如下方式针对资源文件进行读取 ClassPathResource classPathResource new ClassPathResource(static/a.txt); classPathResource.getInputStream(); 其中这个a.txt存放在resources/static目录下 通过上述方式可以获取a中的内容 实现 因为我们无法操作jar包内容所以我们只能将文件存放在别的位置与jar包同级的目录是一个不错的选择。 首先获取根目录 File path new File(ResourceUtils.getURL(classpath:).getPath()); if(!path.exists()) { path new File(); } 然后获取需要的目录我们设定我们需要将文件存放在与jar包同级的static的upload目录下 File upload new File(path.getAbsolutePath(),static/upload/); if(!upload.exists()) { upload.mkdirs(); } 然后当我们要将上传的文件存储的时候按照下面的方式去新建文件然后使用你喜欢的方式进行存储就可以了。 File upload new File(path.getAbsolutePath(),static/upload/test.jpg); FileUtils.copyInputStreamToFile(inputStream, uploadFile); 不要忘记 你需要在application.yml配置中加入以下代码指定两个静态资源的目录这样你上传的文件就能被外部访问到了。 spring: # 静态资源路径 resources: static-locations: classpath:static/,file:static/ 这样就能实现上传文件 最后的封装 工具类https://github.com/LinkinStars/springBootTemplate/blob/master/src/main/java/com/linkinstars/springBootTemplate/util/FileHandleUtil.java 这个工具类依赖了 compile group: commons-fileupload, name: commons-fileupload, version: 1.3.1 compile group: commons-io, name: commons-io, version: 2.4 如何你不喜欢完全可以根据自己的喜欢改变 如何使用 /** * 测试文件上传 */ RequestMapping(/upload) ResponseBody public String upload(MultipartFile file) throws IOException { return 文件存放路径为 FileHandleUtil.upload(file.getInputStream(), image/, file.getOriginalFilename()); } 最后效果 Follow up 这个工具类只是实现了如何上传文件入参也只有InputStream后续如何你需要接入参数File或者加入文件名防重复等等就由你来完成了。 转载于:https://www.cnblogs.com/linkstar/p/9938721.html