Я не могу комментировать java-часть, так как ничего не знаю об этом, но для javascript вы делаете ... не правильно.
Кажется, вы не понимаете, что такоеURL-адрес данных, а также то, что вы здесь делаете.
Таким образом, URL-адрес данных - это строка, состоящая из заголовка и некоторого содержимого файла (data:|mime/type;|file-content
).
URL-адрес данных - это URL, который указываетСам по себе полезно вставлять данные, которые обычно должны обслуживаться из сети.
Довольно часто часть содержимое файла кодируется как base64, поскольку схема URI ограничена в своем наборе разрешенных символов, иэти двоичные данные не могут быть представлены в этой схеме.
Теперь посмотрим, что вы здесь делаете ...
Вы загружаете ресурс как Blob.Это хорошо, Blob - идеальные объекты для работы с двоичными данными.
Затем вы читаете этот Blob URL-адрес данных.Менее хорошо, но я вижу логику: <img>
действительно может загружать изображения из URL-адресов данных.
Но затем из этой строки URL-адреса данных вы создаете новый Blob!Это совершенно неправильно.BLOB-объект, который вы только что создали с помощью new Blob([dataUrl])
, представляет собой текстовый файл , а не файл изображения в любом случае.Так что да, данные все еще скрыты где-то в данных base64, которые сами находятся в URL-адресе данных, но то, что увидит ваш бедный <img>
при доступе к данным, перехваченным URI Blob, на самом деле просто текст, data:image/png;base64,iVBORw0...
, а не ввсе �PNG...
, как его анализатор может читать.
Так что решение довольно простое: избавьтесь от шага FileReader.Вам это не нужно.
var xhr = new XMLHttpRequest();
xhr.open('get', 'https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png');
xhr.responseType = 'blob';
xhr.onload = display;
xhr.send();
function display(evt) {
// we did set xhr.responseType = "blob"
var blob = evt.target.response; // so this is a Blob
// hence, no need for anything else than
var url = URL.createObjectURL(blob);
var img = new Image();
img.src = url;
document.body.appendChild(img);
}
И если позволите, все ваши вещи также могут быть просто
document.getElementById('display').src = 'http://localhost:8080/articles/Pic_test';