2013-12-10 2 views
0

Я хочу получить изображение из mysql/servlet из jsp с помощью jquery. Я сделал сервлет, который извлекает объект из mysql и анализирует его на json, и, наконец, отображает атрибуты объекта с помощью jquery.Извлечение изображения входного потока из сервлета с помощью jquery

После запуска jsp я получил атрибуты строки, но, к сожалению, моя проблема с поврежденным изображением. Я думаю, что у меня проблема с отображением изображения входного потока, или я что-то упускаю. помощь Пожалуйста

index.jsp

<script src="http://code.jquery.com/jquery-latest.js"> 
    </script> 
    <script> 
    $(document).ready(function() 
      { 

     $.ajax 
     ({ 
     type: "GET", 
     url: "InfoServlet", 
     dataType:"json", 
     success: function(data) 
     { 


     $.each(data, function(i,data) 
     { 
      var msg_data= "<div id='msgdiv"+data.Msg+"'>"+data.IdInfo+" and "+data.Msg+"</div>"; 

      $(msg_data).appendTo("#content"); 
      $('#thediv').prepend('<img id="theImg" src='+data.Picture+' />'); 


     }); 

     } 
     }); 


     return false; 
     }); 

    </script> 

</head> 
<body> 


<div id='content'></div> 
<div id='thediv'></div> 

</body> 
</html> 

сервлета:

@WebServlet("/InfoServlet") 
public class InfoServlet extends HttpServlet { 
private static final long serialVersionUID = 1L; 


public InfoServlet() 
{ 
    super(); 

} 

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
{ 
    response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 

    try 
    { 
    Gson gson = new Gson(); 

    InfoService is = new InfoService(); 
    Info info = new Info(); 

    int idinfo = 2; 
    info = is.queryById(idinfo); 
    String gout= gson.toJson(info); 
    System.out.println("{\"Messages\":"+gout+"}"); 
    out.println("{\"Messages\":"+gout+"}"); 
    //System.out.println(gout); 
    } 
    catch (Exception ex) 
    { 
     System.out.println("Error: "+ ex.getMessage()); 
    } 
    finally 
    { 
     System.out.close(); 
    } 
} 

} 

Информационный объект:

package net.test.service; 

import java.io.InputStream; 

public class Info 
{ 
private int IdInfo; 
private String Msg; 
private InputStream Picture; 


public int getIdInfo() { 
    return IdInfo; 
} 
public void setIdInfo(int idInfo) { 
    IdInfo = idInfo; 
} 
public InputStream getPicture() { 
    return Picture; 
} 
public void setPicture(InputStream picture) { 
    Picture = picture; 
} 
public String getMsg() { 
    return Msg; 
} 
public void setMsg(String msg) { 
    Msg = msg; 
} 

} 

ответ

0

У меня есть наблюдения дерева, первый в классе Info член Изображение должно быть байтом [], вы не можете использовать поток, второй в сервлете, когда вы возвращаете ответ json на контент type - response.setContentType ("application/json") ;. Третий и самый важный атрибут src в теге img поддерживает только URL-адрес файла изображения, который не может получить байты изображения.

Предлагаю вам прочитать изображение из базы данных, создать временный файл изображения и отправить URL-адрес, который будет использоваться в теге img.

В гибридном мобильном приложении я визуализирую изображение с помощью javascript, но это был сложный процесс, потому что вам нужно кодировать байты (base-64) и декодировать с помощью javascript и использовать библиотеку для рендеринга изображения с использованием этих байтов.

Надеюсь, это поможет вам.

+0

Хорошее предложение спасибо, но если я поеду с вашим предложением, я думаю, что файлы временного изображения будут увеличиваться с течением времени, а также сохраненное изображение в БД, что означает удвоение пространства HD. Считаете ли вы, что мне нужно изменить код и сохранить только URL-адрес изображения в db, а не изображение. Проблема в том, что я построил весь свой код для работы с сохраненным образцом базы данных как LongBlob, поэтому, если я решил изменить это, мне нужно изменить весь код. Я попытаюсь получить изображение из db в виде массива byte [], как вы заметили вначале, и я попытаюсь посмотреть, есть ли потенциал для показа изображения. – FishCode

+0

Я считаю, что лучшим решением является сохранение URL-адреса в вашей базе данных и сохранение изображения в папке вашего сайта, иногда усилия по реорганизации кода - лучшее решение для повышения производительности и удобства обслуживания. –

+0

Наконец, я попытался работать с Base64, чтобы показать изображение, и это было очень удобно для меня. Thank you – FishCode

Смежные вопросы