Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

достать картинку из базы данных

198  
tavy гость07.03.07 19:43
tavy
NEW 07.03.07 19:43 
Я загружаю картинку с веб-страницы в базу данных (PostgreSQL), сохраняю в двоичном коде (тип bytea). Как мне ее теперь оттуда достать и сохранить, например в папке Temp? Пишу я всё в JSP.
#1 
  scorpi_ скептик07.03.07 20:03
NEW 07.03.07 20:03 
в ответ tavy 07.03.07 19:43
А что конкретно вызывает затруднения? Чтение из БД, запись на диск, или интеграция сего в JSP?
#2 
tavy гость07.03.07 22:07
tavy
NEW 07.03.07 22:07 
в ответ scorpi_ 07.03.07 20:03
Чтение и запись. Я нашла кой-какой код в интернете, но либо кусками, либо слишком большой, там уже сразу супер-картинку выдают. А вот просто сохранить - такого почему-то нет : (.
#3 
  scorpi_ скептик08.03.07 07:28
NEW 08.03.07 07:28 
в ответ tavy 07.03.07 22:07
Хм.. По ключевым словам 'jdbc binary' первая же ссылка - http://jdbc.postgresql.org/documentation/80/binary-data.html. Пойдёт?
#4 
tavy гость08.03.07 10:09
tavy
NEW 08.03.07 10:09 
в ответ scorpi_ 08.03.07 07:28
Этот код
PreparedStatement ps = conn.prepareStatement("SELECT img FROM images WHERE imgname = ?");
ps.setString(1, "myimage.gif");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
byte[] imgBytes = rs.getBytes(1);
// use the data in some way here
}
rs.close();
ps.close();
я уже видела. Меня интересует с места // use the data in some way here
как собрать и сохранить картинку?
#5 
Murr коренной житель08.03.07 10:55
Murr
NEW 08.03.07 10:55 
в ответ tavy 08.03.07 10:09
как собрать и сохранить картинку?
-----
Записать byte[] imgBytes в файл.
#6 
  scorpi_ скептик08.03.07 12:57
NEW 08.03.07 12:57 
в ответ tavy 08.03.07 10:09
Берём FileOutputStream, вызываем метод write c аргументом imgBytes, закрываем FileOutputStream.
#7 
Sanja.com.ua 09.03.07 11:27
NEW 09.03.07 11:27 
в ответ tavy 07.03.07 19:43
Сорри, что немного не в тему, но храннить картинку в базе в двоичном виде непрактично, потому что бза со вренем может очень распухнуть. Не проще картинку хранить на диске, а в базе хранить имя картинки как стринг, читать имя файла из базы, а картинку грузить потом с диsка?
национализм(антисемитизм и т.д) - это не кровь в жилах, это моча в голове
#8 
  digital.pilot старожил09.03.07 11:55
digital.pilot
NEW 09.03.07 11:55 
в ответ Sanja.com.ua 09.03.07 11:27
это 1 из вечных вопросов-поводов для священных войн. Нельзя сказать однозначно. Почитай топеги на sql.ru, там на десятках страниц про это спорили :)
#9 
Simple Nothing is f*cked09.03.07 12:17
Simple
09.03.07 12:17 
в ответ digital.pilot 09.03.07 11:55
Вывод: хранить в базе картинку в ascii art :-D
#10 
Murr коренной житель09.03.07 12:51
Murr
NEW 09.03.07 12:51 
в ответ Simple 09.03.07 12:17
Нефига - конвертить перед сохранением в хех-код с добавлением контрольной суммы...
#11 
tavy гость09.03.07 16:20
tavy
NEW 09.03.07 16:20 
в ответ Sanja.com.ua 09.03.07 11:27
как шеф скажет, так и делаю : )
Всё равно концепция изменилась, теперь в БД надо сохранить путь до картинки, а картинку сразу сохранять в Temp. И теперь вопрос. А это как делать?
#12 
Murr коренной житель09.03.07 17:19
Murr
NEW 09.03.07 17:19 
в ответ tavy 09.03.07 16:20
А это как делать?
-----
Хочешь узнать, что будет следующим? А очень просто - следующим будет раздача прав на просмотр картинок в ТЕМП'е посредством SQL-запросов...
По вопросу - тебе уже отвечали как байт-аррай сбросить в файл...
#13 
  scorpi_ скептик09.03.07 18:26
NEW 09.03.07 18:26 
в ответ tavy 09.03.07 16:20
Проверяем content-type у запроса, если он multipart, то вызываем getInputStream(), читаем через него данные в byte[], а дальше как я уже писал.
Или качаем один из специализированных классов - http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html, http://jakarta.apache.org/commons/fileupload/
#14