【发布时间】:2017-01-20 18:06:52
【问题描述】:
我能够将图像上传到服务器,并且可以在路径/static/images/gallery 中找到我的图像。现在,当我尝试加载上传的图像时,应用程序不显示主题。仅在应用程序重新启动后。
【问题讨论】:
-
请发布与显示图像相关的代码,以及您遇到的错误的详细信息;因为这个问题太模糊了,任何人都无法提供帮助。
我能够将图像上传到服务器,并且可以在路径/static/images/gallery 中找到我的图像。现在,当我尝试加载上传的图像时,应用程序不显示主题。仅在应用程序重新启动后。
【问题讨论】:
我遇到了同样的问题!因为静态目录是在启动时加载的!您必须将上传路径放在资源之外! 让这个项目名称为“Demo”。我认为您的目录是这样的:
Demo
∟ src
∟ main
∟ java
∟ resources
∟ static
∟ images
∟ gallery
不要把你上传的目录放在资源里! 你可以这样做:
@Configuration
public class AdditionalResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/upload/**").addResourceLocations("file://" + System.getProperty("user.dir") + "/src/main/upload/");
}
}
文件:你的固定路径!
现在你的目录是这样的:
Demo
∟ src
∟ main
∟ java
∟ resources
∟ static
∟ images
∟ gallery
∟ upload
∟ static
∟ images
∟ gallery
好的!重启你的弹簧靴!尝试上传一些图片!你可以在http://localhost:80/upload/static/images/gallery/demo.jpg看到这些图片
【讨论】:
file:/// 而不是file://
只要考虑一下war、jar、ear -> 简单地说-> 部署的Java 应用程序是归档文件,归档文件在创建后是不可更改的。在我们的例子中,这意味着当您在路径中保存任何资源时,它正在加载到尚未构建的应用程序路径(项目)......但是您尝试获取资源的应用程序是构建的存档文件,它不存在请求的资源然而。重新启动应用程序后再次构建并创建新的存档文件->这就是它现在可见的原因;)))。解决方案如前所述 ->
【讨论】:
静态目录在启动时加载。因此,当您上传图像或更改静态文件夹下的任何文件或文件夹时,不会反映为 ApplicationContext 已经初始化。
要上传动态图片,您可以按照以下步骤操作:
第 1 步: 在静态文件夹之外创建一个目录,例如 media 我在服务器上创建的
/var/www/html/myapp/media
第 2 步:上传媒体目录中的文件。
第 3 步: 实施 WebMvcConfigurer。
@Configuration
public class AdditionalResourceWebConfiguration implements WebMvcConfigurer {
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/media/**").addResourceLocations("file:media/");
}
}
上传后,您可以动态访问您的文件http://localhost:8080/media/filename.jpg。
【讨论】: