JavaFX HTMLEditor - 使用绝对路径插入本地图像

JavaFX HTMLEditor - Inserting local Image with absolute path

我正在 JavaFX 中调整 HTMLEditor,我的目标是在 HTMLEditor 中插入本地图像。互联网上的图片没问题,工作正常,但当我尝试插入带有绝对路径的本地图片时,它只显示著名的 "X",他没有找到它。

尝试了很多东西,我目前的想法如下代码所示:

htmleditor.setHtmlText(
"<img src='file://C:/hi.png'/>");

这会导致以下 html 代码,我认为这很好,也是我想要的结果,但它没有渲染图像...

<html dir="ltr"><head></head><body contenteditable="true">
<img src="file://C:/test.png"></body></html>

第二个想法)我也生成了一张图片并保存在我的硬盘上,用绝对路径调用文件,但这导致了与上面相同的问题(这里我希望路径是100%正确的...).

File file = new File(TextArea_imagePath.getText() + ".png");
ImageIO.write(img, "png", file);
htmleditor.setHtmlText("<img src=' " + file.getAbsolutePath() + "'/>");

希望有人能帮助我,猜猜这是一个愚蠢的错误。

p.s: Set a local image in JavaFX HTMLeditor 无法帮助我处理没有路径的图像

您的 URI 不正确。在 file: 部分(方案)之后,您必须有 one 斜杠或 three 斜杠。你不能有两个斜杠。

以下有效:

  • <img src='file:/C:/hi.png'/>
  • <img src='file:///C:/hi.png'/>

以下有效:

  • <img src='file://C:/hi.png'/>

这样做的原因是 URI 语法为方案后的两个斜杠赋予了特殊含义。来自 the URI generic syntax specification:

This "generic URI" syntax consists of a sequence of four main components:

<scheme>://<authority><path>?<query>

因此您可以完全省略 //,或者您可以指定一个空权限,如上面的前两个示例所做的那样。

两个斜杠表示后面的文本,C:,是一个权限——即一个主机名,带有可选的用户、密码和端口号。显然 C: 不是有效的主机名,即使是,文件中主机名的准确含义:URI 未明确定义。


你的第二个想法是行不通的。文件名不会自动构成有效的 URI。您需要将其转换为 URI:

htmleditor.setHtmlText("<img src=' " + file.toURI() + "'/>");