日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中关于json传图片的方法

發布時間:2024/3/13 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中关于json传图片的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文轉自:http://www.cnblogs.com/yxy2016/articles/5509095.html


一般來說傳圖片可以以流的形式來傳輸,即便是用json傳輸,一般也都是傳一個地址,而圖片都存在服務器上,然后順著地址發送請求下載圖片。

  但是這次公司的項目中,圖片是存在oracle數據庫中的blob字段的,并沒有存在服務器上,也就是說我必須傳圖片本身過去,而json是無法傳輸二進制的文本格式,因此我就想將圖片轉為字符串形式傳輸,然后對方再解碼然后轉換回來就行了。

  我的方法分三個步驟:

    1.將圖片轉為字節數組

    2.將字節數組轉為字符串

    3.壓縮字符串,放入json傳輸

  首先是第一步,將圖片轉為字節數組,代碼如下:

1 /** 2 * 將圖片轉換為字節數組 3 * @return 4 */ 5 private byte[] loadImage(File file){ 6 //用于返回的字節數組 7 byte[] data=null; 8 //打開文件輸入流 9 FileInputStream fin=null; 10 //打開字節輸出流 11 ByteArrayOutputStream bout=null; 12 try{ 13 //文件輸入流獲取對應文件 14 fin=new FileInputStream(file); 15 //輸出流定義緩沖區大小 16 bout=new ByteArrayOutputStream((int)file.length); 17 //定義字節數組,用于讀取文件流 18 byte[] buffer=new byte[1024]; 19 //用于表示讀取的位置 20 int len=-1; 21 //開始讀取文件 22 while((len=fin.read(buffer))!=-1){ 23 //從buffer的第0位置開始,讀取至第len位置,結果寫入bout 24 bout.write(buffer,0,len); 25 } 26 //將輸出流轉為字節數組 27 data=bout.toByteArray(); 28 //關閉輸入輸出流 29 fin.close(); 30 bout.close(); 31 }catch(Exception e){ 32 e.printStackTrace(); 33 } 34 return data; 35 }

  然后是第二步,將字節數組轉為字符串

1 /** 2 * 把字節數組轉化為字符串----"ISO-8859-1" 3 * @param date 4 * @return 5 */ 6 private String byteToString(byte[] data){ 7 String dataString=null; 8 try{ 9 //將字節數組轉為字符串,編碼格式為ISO-8859-1 10 dataString=new String(data,"ISO-8859-1"); 11 }catch(Exception e){ 12 e.printStackTrace(); 13 } 14 return dataString; 15 }

  接下來就是最后一步,將字符串壓縮后返回

1 /** 2 * 壓縮字符串----"ISO-8859-1" 3 * @param data 4 * @return 5 */ 6 private String compress(String data){ 7 String finalData=null; 8 try{ 9 //打開字節輸出流 10 ByteArrayOutputStream bout=new ByteArrayOutputStream(); 11 //打開壓縮用的輸出流,壓縮后的結果放在bout中 12 GZIPOutpuStream gout=new GZIPOutputStream(bout); 13 //寫入待壓縮的字節數組 14 gout.write(data.getBytes("ISO-8859-1")); 15 //完成壓縮寫入 16 gout.finish(); 17 //關閉輸出流 18 gout.close(); 19 finalData=bout.toString("ISO-8859-1"); 20 }catch(Exception e){ 21 e.printStackTrace(); 22 } 23 return finalData; 24 }

  以上就是我所用的方法,有些不熟悉的地方習慣于一句話一個注釋算是我的習慣吧,可能會讓人看起來比較亂,請不要介意,而且有些注釋都是我自己猜測的,并不一定準確,如果錯了還請指出來,謝謝了!

  然后說下我當時寫這方法的一些瑣碎的事情吧,當時一開始我確實是想著轉字符串傳輸,但是畢竟沒寫過,因此也在網上查閱過,百度上很多都說轉 Base64格式字符串傳輸,我試了很多遍,然而可能是我哪里寫的不對,導致一直沒有成功,我的測試方法是從數據庫中取出那個blob字段的數據,然后經 過轉化壓縮,然后在本地生成一個圖片,但是最終我發現那個圖片都是打不開的,提示文件錯誤或損壞,并且圖片大小也有點怪異,估計是我哪里代碼寫的不對吧。

  然后我就干脆不轉Base64了,但是不設置編碼格式肯定是不行的,后來又在aawwmate的博客中看到了一個轉載的文章,也是關于json傳輸圖片的,看完后我就按照那篇文章中說的用ISO-8859-1格式來傳輸,確實就成功了,在此萬分感謝。

  相信大家在代碼中也看見了那個壓縮字符串的時候,實際上是將字符串轉為字節數組壓縮完后又轉為字符串的吧,為什么要多此一舉,不直接將字節數組 壓縮后再轉為字符串呢,這方面其實我自己也想過,但是我試了還是老樣子,就是本地生成的圖片打不開,以后有時間再去試試能不能改改看。

  關于壓縮的話我當時測試了下,實際上是對于小圖片是會導致圖片變大的,當時好像測試的是一個3k的原圖片,經過上面三個步驟以后,在本地解碼解壓轉換生成的圖片卻是5k的,但是我又試了一個17k的圖片,最終生成的圖片是10k的,也就是說壓縮還是可取的。


總結

以上是生活随笔為你收集整理的java中关于json传图片的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。