Java 使用Vaadin 14显示的图像
我写这篇文章是因为我需要一些帮助。 我无法根据应用程序中的特定路径显示图像 它的基本功能是:我有一个名为Sector的模块,每个Sector都可以有一个与其相关的图像。当我使用Vaadin的Upload组件时,我将图像的路径保存到数据库中的一个表中,以便它可以显示以前选择的图片 图像的实际路径很奇怪,似乎Vaadin将图像复制到了一个动态随机文件夹中。它不能使用图像的实际路径,这似乎是合乎逻辑的 但问题是:路径在数据库中输入得很好,但当我重新加载页面(F5)时,Vaadin无法再显示图像。这让我很不安,因为它应该很好地展示出来 Vaadin使用上载的映像创建的路径:Vaadin/dynamic/resource/2/c1ef7b9d-8f2b-4354-a97e-fe1fd4e868e7/551434.jpg 如果有帮助的话,我可以写一些代码 屏幕截图显示了我刷新浏览器页面后它正在执行的操作 下面是我处理上传图像的代码部分:Java 使用Vaadin 14显示的图像,java,image,upload,vaadin,vaadin14,Java,Image,Upload,Vaadin,Vaadin14,我写这篇文章是因为我需要一些帮助。 我无法根据应用程序中的特定路径显示图像 它的基本功能是:我有一个名为Sector的模块,每个Sector都可以有一个与其相关的图像。当我使用Vaadin的Upload组件时,我将图像的路径保存到数据库中的一个表中,以便它可以显示以前选择的图片 图像的实际路径很奇怪,似乎Vaadin将图像复制到了一个动态随机文件夹中。它不能使用图像的实际路径,这似乎是合乎逻辑的 但问题是:路径在数据库中输入得很好,但当我重新加载页面(F5)时,Vaadin无法再显示图像。这让我
upload.addSucceededListener(e -> {
Component component = createComponent(e.getMIMEType(),
e.getFileName(), buffer.getInputStream());
showOutput(e.getFileName(), component, output);
//imgUpload = (Image) component;
InputStream inputStream = buffer.getInputStream();
targetFile = new File(PATH + currentProjetId + "\\secteur" + currentSecId + "\\photoSec.png");
try {
FileUtils.copyInputStreamToFile(inputStream, targetFile);
} catch (IOException e1) {
e1.printStackTrace();
Notification.show("Error");
}
System.out.println("PATH : " + targetFile.getPath());
});
我认为您使用的是在刷新视图时丢弃的内存中资源。您必须获取文件的内容并将其保存在服务器文件系统目录中的文件中。下面是一个例子:
FileBuffer receiver = new FileBuffer();
Upload upload = new Upload(receiver);
upload.setAcceptedFileTypes("text/plain");
upload.addSucceededListener(event -> {
try {
InputStream in = receiver.getInputStream();
File tempFile = receiver.getFileData().getFile();
File destFile = new File("/some/directory/" + event.getFileName());
FileUtils.moveFile(tempFile, destFile);
} catch (IOException e) {
e.printStackTrace();
Notification.show("Error").
}
});
你必须存储上传的图像。这只是一个临时URL。你能修改问题并分享你如何处理上传的代码吗?我已经添加了处理上传的代码部分。好的,谢谢。我已成功地将图像保存到应用程序目录中的特定文件夹中(实际上它位于src/main/resources/META-INF/resources/photos中)。我读到它是静态图像的地方。但我现在无法创建一个超出该路径的图像。就好像它不知道去哪里找图像一样。如果有助于您理解图像,我可以在屏幕上显示路径以及如何创建图像。如果我的英语不好,我很抱歉。在项目编译期间,
src/main/resources
被复制到target/classes
文件夹(在本例中是复制到target/classes/META-INF/resources/photos
),因此在执行过程中,您不会从那里获得上传的文件作为资源。该文件应该存储在文件系统的其他地方,并从那里加载,然后制作成StreamResource
,以便在执行过程中提供服务。好的,这对我来说有点模糊,是否可以使用StreamResource
的东西作为示例?因为,据我所知,我无法从复制的文件创建图像,因为它没有存储在正确的位置。但是我应该在哪里以及如何存储它呢?目标文件可以位于磁盘上的任何位置,然后您可以将其读取到inputStreamfile imageFile=new file(“my/download/file.jgp”)代码>->InputStream targetStream=FileUtils.openInputStream(imageFile)代码>然后用于OK,因此如果我理解正确:-当用户上载图像时,我将文件复制到目录/home/user/photos
。-我将文件的路径存储在我的数据库中-当他转到我需要显示图像的视图时:我用图像创建一个InputStream
,然后使用StreamResource
显示内容,是吗?如果你知道的话,你能给我解释一下如何使用这个StreamResource
?顺便说一下,谢谢。