Как извлечь изображение из URL-адреса и сохранить его как BLOB-объект в Java (механизм приложений Google) - PullRequest
1 голос
/ 11 марта 2010

Я понимаю, как получить текстовую страницу URL и просмотреть результаты

URL url = new URL(this.url);
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String line;
while ((line = reader.readLine()) != null) {
    ....

Как мне сделать это, чтобы получить изображение и сохранить его как BLOB-объект?

Ответы [ 3 ]

3 голосов
/ 11 марта 2010

Просто получите это как InputStream и используйте PreparedStatement#setBinaryStream(), чтобы сохранить его. Это двоичные данные, а не символьные данные, так что Reader будет только портить вещи, вы не хотите иметь это.

В двух словах:

InputStream input = imageUrl.openStream();

// ...

statement = connection.prepareStatement("INSERT INTO image (content) VALUES (?)");
statement.setBinaryStream(1, input);
statement.executeUpdate();

A PreparedStatement действительно полезен. Он не только спасает вас от SQL-инъекций , но также облегчает установку полноценных объектов Java, таких как InputStream, в инструкции SQL. Вы можете узнать больше о PreparedStatement на уроке JDBC .

3 голосов
/ 28 июля 2010

Что я делаю для хранения двоичных данных, таких как изображения, довольно просто. В моем случае я имею дело с загруженными файлами, которые публикуются в сервлете. Внутри сервлета я получаю InputStream в опубликованном теле с помощью request.getInputStream (). Однако это работает с любым типом InputStreawm, включая один на основе URL. В приведенном ниже примере кода показано, как преобразовать этот InputStream в двоичный объект Google Appeninge, который, например, можно сделать постоянным в хранилище данных.

...
import org.apache.commons.io.IOUtils;
import com.google.appengine.api.datastore.Blob;
...

public void InputStreamToBlob(InputStream i) throws IOException {

    ...

    Blob content = new Blob(IOUtils.toByteArray(i));
    ...
0 голосов
/ 11 марта 2010

Для изображения вместо чтения буфера построчно, вы загружаете его в байтовый массив и сохраняете этот байтовый массив как большой двоичный объект.

...