Вам нужно будет base64 кодировать байты изображения, которые вы получаете из базы данных, а затем отображать изображение, используя байты base64.
Таким образом, вы можете сделать что-то вроде следующего:
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer)));
Где arrayBuffer
- буфер байтов, как только вы получили строку base64, вы можете установить ее в публичную переменную , Имейте в виду, что вам нужно добавить заголовок к строке base64. Таким образом, если ваша общедоступная переменная называется image
, вам нужно будет сделать следующее:
this.image = 'data:image/jpeg;base64,' + base64String
Как только вы это сделаете, вы можете отобразить iamge, используя следующий тег:
<img id="image" [src]="image" >
Вы определенно хотите использовать PreparedStatements. Они удобны. Вот пример.
Обычно, Вы не должны создавать вход конкатенации запроса, но использование PreparedStatement вместо этого.
Это позволяет Вам указать, в которых местах Вы будете устанавливать свои параметры в Вашем запросе, таким образом, Java будет заботиться об очистке всех исходных данных для Вас.
PreparedStatement? Да, абсолютно. Но я думаю, что существует еще один шаг: проверка входа от UI и связывающий с объектами до нахождения рядом с базой данных.
Я вижу, где привязка Строки в PreparedStatement могла бы все еще оставить Вас уязвимыми для атаки с использованием кода на SQL:
String userInput = "Bob; DELETE FROM FOO";
String query = "SELECT * FROM FOO WHERE NAME = ?";
PreparedStatement ps = connection.prepareStatement(query);
ps.setString(1, userInput);
ps.executeQuery();
Я имею, должен признать, что я не попробовал его сам, но если бы это удаленно возможно, что я сказал бы, что PreparedStatement необходим, но не достаточен. Проверка и привязывание стороны сервера являются ключевыми.
Я рекомендовал бы делать его с обязательным API Spring.
Ваш ввод данных пользователем должен был бы на самом деле быть "Bob'; delete from foo; select '"
(или что-то как этот), таким образом, неявные кавычки, добавленные подготовленным оператором, были бы закрыты:
SELECT * FROM FOO WHERE NAME = 'Bob'; delete from foo; select ''
но если Вы сделаете это, то подготовленный код оператора заключит Вашу кавычку в кавычки, таким образом, Вы получите фактический запрос
SELECT * FROM FOO WHERE NAME = 'Bob''; delete from foo; select '''
и Ваше имя было бы сохранено как "Bob', delete from foo; select '"
вместо того, чтобы выполнить несколько запросов.