JavaFX HTMLEditor - вставка локального изображения с абсолютным путем

я настраиваю HTMLEditor в JavaFX, и моя цель - вставить локальные изображения в HTMLEditor. Изображения в Интернете не проблема и работают нормально, но когда я пытаюсь вставить локальные изображения с абсолютным путем, то он просто показывает знаменитый «Х», что он его не нашел.

Пробовал много вещей, моя текущая идея показана в следующем коде:

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>

2-я идея) Я также сгенерировал картинку и сохранил ее на своем жестком диске, назвал файл с абсолютным путем, но это приводит к той же проблеме, что и выше (и здесь я ожидаю, что путь будет на 100% правильным...).

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

Надеюсь, кто-нибудь может мне помочь, думаю, это глупая ошибка.

p.s: Установите локальное изображение в JavaFX HTMLeditor не мог мне помочь и лечил изображения без пути


person MavidDeyers    schedule 04.10.2017    source источник


Ответы (1)


Ваши URI неверны. После части file: (схема) должна быть одна косая черта или три косые черты. Вы не должны использовать две косые черты.

Следующие действительны:

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

Следующее не недействительно:

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

Причина этого в том, что синтаксис URI придает особое значение двум косым чертам, следующим за схемой. Из спецификации универсального синтаксиса URI:

Этот синтаксис «общий URI» состоит из последовательности четырех основных компонентов:

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

Таким образом, вы можете либо полностью опустить //‹полномочия›, либо указать пустые полномочия, как это делается в первых двух примерах выше.

Две косые черты означают, что текст, следующий за ним, C:, является полномочиями, то есть именем хоста с необязательным пользователем, паролем и номером порта. Очевидно, что C: не является допустимым именем хоста, и даже если бы это было так, точное значение имени хоста в файле: URI определено нечетко.


Ваша вторая идея не будет работать как есть. Имя файла не является автоматически допустимым URI. Вам нужно преобразовать его в URI:

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