2016-10-22 3 views
0

こんにちは、私はユーザーが自分のプロフィールに画像をアップロードすることができるWebアプリケーションを構築しようとしています。だから私は、このテーブルに行のブロブとして、テーブルのユーザーとイメージを持っているし、今私は、Javaサーブレットを使用して、それを取得しようとしていますが、私はわずかな空白square.myコードを取得:Java Servlet Mysql Blob画像

import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 
import java.sql.*; 

public class Profile extends HttpServlet { 

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException { 
    response.setContentType("text/html;charset=UTF-8"); 
    ServletOutputStream out = response.getOutputStream(); 
    try{ 

    Class.forName("com.mysql.jdbc.Driver"); 

     Connection con=DriverManager.getConnection 
       ("jdbc:mysql://195.251.267.131:3306/****","****","****"); 

    PreparedStatement ps=con.prepareStatement 
       ("select * from users where email=?"); 
HttpSession session=request.getSession(false); 
if(session!=null){ 
String email=(String)session.getAttribute("email"); 
Blob photo = null;      
    ps.setString(1, email); 

    ResultSet rs =ps.executeQuery(); 
     while(rs.next()) { 
    photo = rs.getBlob(1); 
    } 
    response.setContentType("image/jpg"); 
    InputStream in = photo.getBinaryStream(); 
    int length = (int) photo.length(); 

    int bufferSize = 1024; 
    byte[] buffer = new byte[bufferSize]; 

    while ((length = in.read(buffer)) != -1) { 
    System.out.println("writing " + length + " bytes"); 
    out.write(buffer, 0, length); 
    } 

     in.close(); 
    out.flush(); 
     } 
    } 
} 
+0

おそらく、デバッガをステップスルーして何が受信されているのかを確認して、ここに書き込んでください。また、クライアント側で何かを送信していることを確認する必要があります。 – shinzou

答えて

0

あなたのコードにいくつかの原因が考えられます:

  • 最初にcontentType = text/htmlを設定しないでください。仕方がない。
  • mimetype for jpg imagesimage/jpegです。

さらに、私はまた、これらのマイナーな修正を提案:

  • length=photo.lengthを初期化しないでください。仕方がない。
  • 4096の倍数のバッファを使用してください。より効率的です。
  • アパートout.flush()をやってから、あなたもできれのtry-と資源の命令で、開かれたストリーム(outin)を閉じる必要があります:

try(OutputStream out=response.getOutputStream()) { ... }

同じJDBCリソースのために:接続、ステートメント結果セット。

  • session == nullの場合、別の動作が考えられます。たとえば、ServletExceptionに説明メッセージをスローします。
+0

あなたが提案した修正を試してみましたが、(session!= null)場合、結果は私のページの右上に同じ小さなボーダーの空白のsqareです – groundslam

+0

あなたのサーブレットをブラウザから直接呼び出してテストしますアドレスバーに 'http:// server:port/context/servlet'と入力し、サーバから返される応答を確認します。 –