Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение изображения из сервлета 
:(
    Опции темы
Гость_EcoloRa
Дата 9.3.2004, 04:14 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











У меня есть код:

Код
public void doPost(javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response) throws
javax.servlet.ServletException, java.io.IOException {

performTask(request, response);
performTask(request, response);
response.setContentType("image/jpeg");
try
 {
    Class.forName(MySQLDriver).newInstance();

 Properties connInfo = new Properties();
 connInfo.put("user",MySQLUser);
 connInfo.put("password",MySQLPassword);
 connInfo.put("useUnicode","true");
 connInfo.put("characterEncoding",MySQLcharacterEncoding);

 Conn = DriverManager.getConnection(MySQLUrl,connInfo);

    Stmt = Conn.createStatement();
    //Пытаюсь заюзать базу
 Stmt.executeUpdate("USE news");
 RS = Stmt.executeQuery("SELECT image FROM News_images where rowid=1");

 while (RS.next()) {
  com.mysql.jdbc.Blob bl = null;
  bl = (com.mysql.jdbc.Blob) RS.getBlob("image");
  //Создать объект класса ObjectOutputStream.
  ObjectOutputStream out = new
ObjectOutputStream(response.getOutputStream());
  //Записать структуру данных методом writeObject.
  //out.writeObject(bl);
  out.write(bl.getBytes(1,(int) bl.length()));
  //Очистить поток, чтобы быть уверенным в том, что всё содержимое
послано клиенту.
  out.flush();
 }
}
catch (Exception E)
{
    //pw.println(MesageError);
    //pw.println(E);
}
}


Когда я в интернете вызываю этот сервлет, он возвращает ерунду какую-то но не рисунок.
Помогите разобраться в чем проблема?
  Вверх
DarkDS
Дата 9.3.2004, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



response.getOutputStream() - открывает стрим, который будет показыватся клиенту, то есть когда ты вызываешь сервлет, то на клиент получает данные, которые записываются в этот стрим. Это значит, что если ты хочешь чтобы в эксплорере показывалось что то осмысленное, то туда нужно писать текст.
Вызывая out.write(bl.getBytes(1,(int) bl.length())); ты просто пишешь содержимое картинки в стрим и соотвественно видишь это в эксплорере.
PM MAIL   Вверх
__vi
Дата 9.3.2004, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 21.1.2004

Репутация: нет
Всего: -1



Цитата
эксплорере показывалось что то осмысленное, то туда нужно писать текст

Так он же миме определяет?
PM MAIL   Вверх
DarkDS
Дата 9.3.2004, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Цитата(__vi @ 9.3.2004, 14:42)
Так он же миме определяет?

Для сервлета?
Миме тип же для файлов задается... Во всяком случае я в первый раз слышу, что миме можно для сервлета задать...

Это сообщение отредактировал(а) DarkDS - 9.3.2004, 15:42
PM MAIL   Вверх
__vi
Дата 9.3.2004, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 301
Регистрация: 21.1.2004

Репутация: нет
Всего: -1



Цитата
Миме тип же для файлов задается... Во всяком случае я в первый раз слышу, что миме можно для сервлета задать...

Ты чего? Он задаёт миме тип http ответа! В заголовке будет указанно что передаются данные такого-то типа и броузер уже там сам разберётся если знает как.
PM MAIL   Вверх
EcoloRa
Дата 10.3.2004, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.3.2004

Репутация: нет
Всего: нет



Господа, может кто-нибудь знает как инициализировать JPEG массивом байтов в Java?
Я бы тогда в поток записывал методом writeObject() сам JPEG объект.
Или может кто-то найдет ошибку в моем коде?
Буду крайне признателен.
PM MAIL WWW ICQ Skype   Вверх
EcoloRa
Дата 12.3.2004, 04:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 1.3.2004

Репутация: нет
Всего: нет



Внимание! Привожу последний вариант метода doPost:
Появились setContentLength() и close(), но получение рисунка все-равно не работает. А вот запись байтов в файл (выделено жирным) работает!!! Получается нормальный jpg рисунок.

Код
public void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, java.io.IOException {

performTask(request, response);
//response.setContentType("text/html;charset=Windows-1251");
response.setContentType("image/jpeg");
//response.setContentType("application/download");
//прослеживанию сеанс
HttpSession hs = request.getSession(true);
String s = (String) hs.getValue("correct");
if ((s != null) && (s.equals(ValueCorrectSeanse))) {
try
 {
    Class.forName(MySQLDriver).newInstance();
   
 Properties connInfo = new Properties();
 connInfo.put("user",MySQLUser);
 connInfo.put("password",MySQLPassword);
 connInfo.put("useUnicode","true");
 connInfo.put("characterEncoding",MySQLcharacterEncoding);

    //Conn = DriverManager.getConnection(MySQLUrl,MySQLUser,MySQLPassword);
 Conn = DriverManager.getConnection(MySQLUrl,connInfo);
 
    Stmt = Conn.createStatement();
    //Пытаюсь заюзать базу
 Stmt.executeUpdate("USE news");
 RS = Stmt.executeQuery("SELECT image FROM News_images where rowid=1");
 while (RS.next()) {
  com.mysql.jdbc.Blob bl = null;
  bl = (com.mysql.jdbc.Blob) RS.getBlob("image");
 
  [b]OutputStream f1 = new FileOutputStream("c:/temp/file111.jpg");
  f1.write(bl.getBytes(1,(int) bl.length()));
  f1.close();[/b]
 
  response.setContentLength((int) bl.length());
  //Создать объект класса ObjectOutputStream.
  ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
  //запись в поток
  out.write(bl.getBytes(1,(int) bl.length()));
  //Очистить поток, чтобы быть уверенным в том, что всё содержимое послано клиенту.
  out.flush();
  out.close();
 }
}
catch (Exception E)
{
    //pw.println(MesageError);
    //pw.println(E);
}

//конец ифа ниже
}
else {
 //pw.println("<H2>"+AcessDenied+"<H2>");
 }
}


В чем же проблемаconfused.gif
PM MAIL WWW ICQ Skype   Вверх
Hidrag
Дата 3.7.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



Так все таки как написать метод сервлета который вернут картинку?

я пытаюсь так:

в JSP вызываю так: 
Код

<img src="GetImage?id=1">


в сервлете у меня так:
Код

    private DBManager dbm = DBManager.getInstance();
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        //определяем что вернется
        response.setContentType("image/jpeg");
        //читаем параметр
        String sid = request.getParameter("id");
        //конвертим
        int id = Integer.parseInt(sid);
        //получаем картинку
        BufferedImage img = dbm.getImage(id);
        //получаем врайтер
        PrintWriter out = response.getWriter();
        //отдаем картинку
        out.print(img);
    }



то что метод   BufferedImage img = dbm.getImage(id); возвращает картинку - 100% проверял отдельно (спасибо powerOn)

но картинка не возвращается, в какую сторону смотреть?




--------------------
user posted image
PM WWW ICQ   Вверх
powerOn
Дата 3.7.2007, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


Профиль
Группа: Участник
Сообщений: 4367
Регистрация: 7.10.2005

Репутация: 47
Всего: 159



что-то типа того, но только картинка как я понял у тебя из БД пойдет:

Код

        response.setContentType("image/jpeg");
        OutputStream os = response.getOutputStream();
        
        BufferedImage img = ImageIO.read(new File("C:/test.png"));
        ImageIO.write(img, "png", os);
        
        os.close();



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Hidrag
Дата 3.7.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 877
Регистрация: 9.4.2005
Где: JDK

Репутация: 3
Всего: 25



powerOn, Супер! Работает!!! smile Огромное спасибо еще раз!


--------------------
user posted image
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.4307 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.