【发布时间】:2019-04-28 10:41:17
【问题描述】:
我的问题是,当我从一个 jsp 上传图像并转到另一个应该显示已上传图像的 jsp 时,它没有显示。图像已上传并保存在我的服务器中,我引用了正确的路径,但为了查看图像,我只需要重新启动 tomcat。 这是我的上传器servlet(我认为它可以正常工作,因为图像已保存):
// Get file from form
Part part = request.getPart("cartel");
// Path
String ruta_local = getServletContext().getInitParameter("local_path");
String img_dir = getServletContext().getInitParameter("img_directory");
// Image name
String fileName = extractFileName(part);
// Add random number to image name
Random rand = new Random();
int random_numbers = rand.nextInt(1000);
fileName = NameOrExtension(fileName, "nombre") + String.format("%03d", (random_numbers))
+ "." + NameOrExtension(fileName, "extension");
request.getSession().setAttribute("foto", fileName);
// Final path
String cartel_path = ruta_local + File.separator
+ img_dir + File.separator + fileName;
File cartel = new File(cartel_path);
// File write
try (InputStream input = part.getInputStream()){
Files.copy(input, cartel.toPath());
input.close();
}
图像保存在我的 img-carteles forlder 中,它位于 WebContent 文件夹中,当我尝试显示知道他的名字的图像时,我使用:
<img class="card-img-top" src="img-carteles/image_name" alt="Card image cap">
所以我认为这是一个 tomcat 的渲染问题。 问题:如何在不重启tomcat的情况下显示和上传图片?
【问题讨论】:
-
映射到 img-carteles 的 servlet 的代码是什么,从目录加载图像,并将其字节发送到响应?如果你没有这样的 servlet,那就是你的问题:不要将数据存储在 tomcat 的 webapp 目录中。将它们存储在外部目录中,并编写这样的 servlet 以从该目录中读取它们。当您部署应用程序的下一个版本时,您不希望丢失所有这些图像。图片就是数据。
-
另外,您使用了错误的命名约定。在 Java 中,我们不使用下划线作为变量名 - random_numbers 应该是 randomNumbers
-
@JBNizet 我不明白为什么您必须通过 servlet 缓冲图像,而不是像使用普通图像(不是由用户上传)那样访问它。是不是因为当你启动 Tomcat 时,它会将所有网页内容保存在内存中,而最近上传的内容不在其中?谢谢你的回答
-
不在内存中,而是在工作文件夹中。但最重要的是,上传的文件是数据,如果您重新部署或重新安装tomcat,它们不应该消失。您应该能够从多个集群的 tomcat 实例中提供这些数据。并在提供服务之前检查权限。是数据,就是表单提交的数据,保存在数据库中。