在 intelij 获得焦点之前,浏览器不会显示上传的图像
Posted
技术标签:
【中文标题】在 intelij 获得焦点之前,浏览器不会显示上传的图像【英文标题】:Browser doesn't display uploaded image until intelij gets focus 【发布时间】:2019-12-20 04:27:19 【问题描述】:我在使用 thymeleaf 作为模板引擎的 Spring Boot 应用程序中使用 intellij-idea 显示图片时遇到了这个奇怪的问题。 到目前为止,我可以上传图像,但是,它只有在我给 Idea 聚焦时才会显示,这意味着,Idea 在不聚焦时不会刷新图像文件夹。 在此之前,除非我重新启动服务器,否则我根本无法显示图像,但是在我设置“帧停用”策略后,我可以显示新上传的图像,当然只有在我给出想法焦点之后触发图像文件夹的刷新。
我尝试了其他一些改变注册表值的技巧,以及使用开发工具的其他技巧,但没有一个能达到我想要的效果。
有没有办法让 Idea 在更改时刷新其文件夹而没有窗口焦点? 或者,我可以用不同的方式解决这个问题吗?
提前感谢您的宝贵帮助。
这是关于图像显示的部分
<img th:src="@$user.imagePath"/>
imagePath 代表图片在DB中的路径 示例值:http://localhost:8888/images/users_pictures/user_image_5.jpg
我不希望控制器和服务类涉及此问题,因为图像毕竟是上传和显示的,但请不要犹豫,要求我提供可能影响问题的其他源代码。
【问题讨论】:
我不太确定我是否理解您想要做什么:您为什么不在普通浏览器中测试您的应用程序?你如何“上传”图像?为什么你会期望图像会改变?上传后是否有一些 javascript 正在轮询服务器或等待一些 websocket 事件或页面刷新? 嗨,托马斯。我的应用程序只是添加了带有个人资料图片的用户。当我添加新用户时,添加了用户,并且图片确实已加载并保存在 static/images 文件夹中,但是,浏览器不显示图片(显示带有损坏缩略图的图片)。我必须转到我的想法(意味着 IDE 获得焦点)并刷新图像文件夹(新用户图片添加到 intellij 图像文件夹中),当我返回浏览器并刷新它时,图片正确显示. PS:没有使用 Javascript 或任何前端框架。 我的疯狂猜测是,这与 IntelliJ 在On frame deactivation
上的 Update classes and resources
有关。如果您将图像上传到项目目录而不是 war 文件目录,则可能会发生这种情况。考虑到图像只能从 war 文件中获得,在 IntelliJ 的 Update classes and resources
在 IDE 获得焦点时启动之前,您无法看到它们。
嗨,Kedar。这正是我的问题。有办法解决吗?感谢您的回复。
好吧,他已经暗示了解决问题的方法:“如果您将图像上传到项目目录而不是战争文件目录,则可能会发生这种情况。” - 只是不要 i> 将图像上传到项目目录,但使用 war 文件目录。在生产中不会有任何 IDE 来运行您的应用程序,因此您应该构建它,就好像从一开始就没有在您的机器上一样。您的软件应该从不依赖于用于构建它的 IDE。
【参考方案1】:
如上所述,项目目录不是存储图像的合适位置。 (如果您希望图片在运行或部署之间保持不变,则可能不是部署目录。)相反,您应该:
-
将图像存储在数据库中。
将图像存储在可从您的应用程序部署到的位置访问的本地目录中。
在任何一种情况下,您都无法依赖资源 servlet 来提供图像。您必须创建一个控制器来输出适当的图像(来自数据库或文件系统)。
【讨论】:
感谢您的回答。从文件系统中获取它们更有意义。因为我是初学者,所以我只是想确保我能很好地理解你。当您说“将图像存储在可从您的应用程序部署到的位置访问的本地目录中”时,您的意思是服务器机器,对吗? 是的,服务器。以上是关于在 intelij 获得焦点之前,浏览器不会显示上传的图像的主要内容,如果未能解决你的问题,请参考以下文章
Silverlight 4:如何在键盘焦点上显示工具提示(修订)