spring boot 图片上传与显示功能实例详解
程序员文章站
2024-02-29 20:15:52
首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到c...
首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到classpath的目录下的,所以上传的文件不知相对于应用目录在哪,也不知怎么写访问路径合适,对于新手的自己真的一头雾水。
后面想起了官方的例子,没想到一开始被自己找到的官方例子,后面太依赖百度谷歌了,结果发现只有官方的例子能帮上忙,而且帮上大忙,直接上密码的代码
package hello; import static org.springframework.hateoas.mvc.controllerlinkbuilder.linkto; import static org.springframework.hateoas.mvc.controllerlinkbuilder.methodon; import java.io.ioexception; import java.nio.file.files; import java.nio.file.paths; import java.util.stream.collectors; import javax.servlet.http.httpservletrequest; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.beans.factory.annotation.autowired; import org.springframework.core.io.resourceloader; import org.springframework.http.responseentity; import org.springframework.stereotype.controller; import org.springframework.ui.model; import org.springframework.web.bind.annotation.pathvariable; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.requestmethod; import org.springframework.web.bind.annotation.requestparam; import org.springframework.web.bind.annotation.responsebody; import org.springframework.web.multipart.multipartfile; import org.springframework.web.servlet.mvc.support.redirectattributes; @controller public class fileuploadcontroller { private static final logger log = loggerfactory.getlogger(fileuploadcontroller.class); public static final string root = "upload-dir"; private final resourceloader resourceloader; @autowired public fileuploadcontroller(resourceloader resourceloader) { this.resourceloader = resourceloader; } @requestmapping(method = requestmethod.get, value = "/") public string provideuploadinfo(model model) throws ioexception { model.addattribute("files", files.walk(paths.get(root)) .filter(path -> !path.equals(paths.get(root))) .map(path -> paths.get(root).relativize(path)) .map(path -> linkto(methodon(fileuploadcontroller.class).getfile(path.tostring())).withrel(path.tostring())) .collect(collectors.tolist())); return "uploadform"; } //显示图片的方法关键 匹配路径像 localhost:8080/b7c76eb3-5a67-4d41-ae5c-1642af3f8746.png @requestmapping(method = requestmethod.get, value = "/{filename:.+}") @responsebody public responseentity<?> getfile(@pathvariable string filename) { try { return responseentity.ok(resourceloader.getresource("file:" + paths.get(root, filename).tostring())); } catch (exception e) { return responseentity.notfound().build(); } } <strong>//上传的方法</strong> @requestmapping(method = requestmethod.post, value = "/") public string handlefileupload(@requestparam("file") multipartfile file, redirectattributes redirectattributes, httpservletrequest request) { system.out.println(request.getparameter("member")); if (!file.isempty()) { try { files.copy(file.getinputstream(), paths.get(root, file.getoriginalfilename())); redirectattributes.addflashattribute("message", "you successfully uploaded " + file.getoriginalfilename() + "!"); } catch (ioexception|runtimeexception e) { redirectattributes.addflashattribute("message", "failued to upload " + file.getoriginalfilename() + " => " + e.getmessage()); } } else { redirectattributes.addflashattribute("message", "failed to upload " + file.getoriginalfilename() + " because it was empty"); } return "redirect:/"; } }
看完上面的代码可以理解到spring boot 的存取文件思路了,存的时候的路径为
paths.get(root, filename).tostring()))
这个路径会在本地的工程根目录上创建,不应用部署里的目录,所以一般的访问http访问不可能 ,所以它提供了resourceloader,利于这个类可以加载非应用目录的里文件然后返回
所以就可以读取文件,所以就要写getfile方法来显示图片
如果大家对spring boot不是很了解,大家可以参考下面两篇文章。
以上所述是小编给大家介绍的spring boot 图片上传与显示功能实例详解,希望对大家有所帮助
推荐阅读
-
spring boot 图片上传与显示功能实例详解
-
Spring Boot实现图片上传/加水印一把梭操作实例代码
-
spring boot实现上传图片并在页面上显示及遇到的问题小结
-
Spring Boot 定制与优化内置的Tomcat容器实例详解
-
Spring Boot实现图片上传功能
-
Spring Boot实现图片上传功能
-
spring boot+vue 的前后端分离与合并方案实例详解
-
Spring Boot 定制与优化内置的Tomcat容器实例详解
-
spring boot实现上传图片并在页面上显示及遇到的问题小结
-
使用Spring boot + jQuery上传文件(kotlin)功能实例详解