Это из простой программы кодирования / декодирования base64. Я добавляю функцию перетаскивания, чтобы пользователь мог перетаскивать файлы изображений в программу и удалять их. d & d работает, но теперь я хочу, чтобы программа автоматически кодировала отброшенное изображение и отображала его строку base64.
Этот метод в основном использует переработанный код из другого метода в той же программе, который позволяет пользователю загружать изображение и кодировать его в строку base64. Проблема здесь в том, что IOException генерирует каждый раз, даже если изображение отображается. Таким образом, изображение не читается в байтах [] ... но я не могу понять, почему.
// a method that handles drop events
@FXML
private void handleDrop(DragEvent event) throws FileNotFoundException
{
// display the image on file drop
List<File> files = event.getDragboard().getFiles();
Image img = new Image(new FileInputStream(files.get(0)));
imageDisplay.setImage(img);
// encode the image on file drop
byte[] imageBytes;
try {
File droppedFile = new File("/path");
Path path = Paths.get(droppedFile.getAbsolutePath());
imageBytes = Files.readAllBytes(path);
} catch (IOException e) {
showAlert(Alert.AlertType.ERROR, "Byte reader error", "Sorry, I was unable to read the file to a byte array.");
return;
}
String encodedString = Base64.getEncoder().encodeToString(imageBytes);
textArea.setText(encodedString);
}
Я бы хотел, чтобы этот метод работал так:
-user перетаскивает файл изображения в окно программы
-пользователь сбрасывает файл изображения
-изображение отображается в программе просмотра изображений в программе
строка в кодированном изображении отображается в соответствующем окне