Это не сработает.Оставьте этот блоб на стороне сервера.JavaScript на стороне клиента не может ничего сделать с двоичными данными.Все, что ему нужно, это URL-адрес изображения, чтобы он мог ссылаться на него в атрибуте src
элемента HTML <img>
, чтобы веб-браузер, в свою очередь, мог выполнять свою работу по загрузке и отображению изображения.Лучше всего включить идентификатор изображения в URL.Название уникально для изображения, верно?Вместо этого используйте это в URL.
Первый шаг - позволить JS создать элемент HTML <img>
с соответствующим атрибутом src
, который указывает на URL, который возвращает изображение.Предполагая, что вы подготавливаете данные следующим образом
String name = "foo.png";
String imageURL = "imageservlet/" + name;
request.setAttribute("imageURL", imageURL);
и печатаете их в JSP (!), Как если бы это были переменные JS следующим образом
<script>
var imageURL = '${imageURL}';
// ...
</script>
(пожалуйста,обратите внимание, что эти одинарные кавычки, таким образом, являются обязательными для представления их в виде строковой переменной JS)
, чтобы они оказались в сгенерированном источнике HTML следующим образом (щелкните правой кнопкой мыши страницу в браузере и выполните Просмотр источника чтобы проверить это)
<script>
var imageURL = 'imageservlet/foo.png';
// ...
</script>
тогда вы можете создать изображение следующим образом
var img = document.createElement("img"); // or getElementById("someId")?
img.src = imageURL;
// ... add to document?
(обратите внимание, что это всего лишь пример, я понятия не имеючто такое функциональное требование и что вы хотели бы сделать с этим элементом изображения, даже больше, возможно, JS-код вообще не нужен для конкретного функционального требования)
, чтобы он в конечном итогеэто в HTML:
<img src="imageservlet/foo.png" />
Теперь вторым шагом является создание сервлета , который прослушивает шаблон URL-адреса /imageservlet/*
, извлекает изображение как InputStream
избазы данных с помощью переданного идентификатора изаписывает его в OutputStream
ответа вместе с набором правильных заголовков ответа.Короче говоря, я уже писал несколько ответов о том, как это сделать, они содержат фрагменты исходного кода: