解决方法:
1:在后台以InputStream的方式将图片从数据库中读出:
public static InputStream getPicInputStream(){ String id = "f304733361e243779b2340afe20e62bf"; Connection conn = JdbcUtil.getConnection(); PreparedStatement ps = null; ResultSet rs = null; InputStream is = null; String sql = "select zp from pic_test where id= ?"; try { ps = conn.prepareStatement(sql); ps.setString(1, id); rs = ps.executeQuery(); if(rs.next()){ is = rs.getBlob("zp").getBinaryStream(); } } catch (SQLException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); }finally{ try { if(null!=ps){ ps.close(); } } catch (SQLException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } try { if(null!=rs){ rs.close(); } } catch (SQLException ex) { Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex); } JdbcUtil.release(conn); } return is; }
2:在Servlet中直接生成图片:
response.setContentType("image/jpeg"); InputStream is = Test.getPicInputStream(); if(null!=is){ OutputStream os = response.getOutputStream(); int len; byte buf[] = new byte[1024]; while((len=is.read(buf))!=-1){ os.write(buf, 0, len); } is.close(); os.close(); }
3:Android客户端的处理
public class MainActivity extends Activity { ImageView imgView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgView = (ImageView)findViewById(R.id.imgView); new ImgViewAsyncTask().execute(""); } class ImgViewAsyncTask extends AsyncTask<String,String,String>{ Bitmap bitmap = null; @Override protected void onPreExecute() { } @Override protected String doInBackground(String... strings) { InputStream is = null; String result = ""; try { URL picURL = new URL("http://192.168.0.165:8084/wisdompm/PicServlet"); HttpURLConnection conn = (HttpURLConnection)picURL.openConnection(); conn.setConnectTimeout(10000); conn.connect(); is = conn.getInputStream(); if(null!=is){ bitmap = BitmapFactory.decodeStream(is); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(null!=is){ is.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } @Override protected void onPostExecute(String s) { if(null!=bitmap && null!=imgView){ imgView.setImageBitmap(bitmap); } } } }
测试结果: