1. 程式人生 > >通過網路HTTP URL將圖片儲存為byte陣列

通過網路HTTP URL將圖片儲存為byte陣列

本人菜鳥一枚,發文僅供個人學習。

最近工作中給了我一個任務,要我在前端給的一個介面路徑後,我拼接路徑前的
http://IP:埠 在瀏覽器中就會開啟一個圖片,我要根據這個URL獲取到這個圖片
的 byte[ ], 最後用base64加密傳送。

下面是程式碼實現

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class Img {
public static void main(String[] args) throws Exception {

    String url = "http://pic39.nipic.com/20140226/18071023_152956865000_2.jpg";

    byte[] bytes = getFileStream(url);

    OutputStream out = new FileOutputStream("D:\\aaa.jpg");

    InputStream is = new ByteArrayInputStream(bytes);

    byte[] buff = new byte[1024];
    int len = 0;
    while((len=is.read(buff))!=-1){
        out.write(buff, 0, len);
    }
    is.close();
    out.close();
}

/**
  * 得到檔案流
  * @param url
  * @return
  */
 public static byte[] getFileStream(String url){
     try {
         URL httpUrl = new URL(url);
         HttpURLConnection conn = (HttpURLConnection)httpUrl.openConnection();
         conn.setRequestMethod("GET");
         conn.setConnectTimeout(5 * 1000);
         InputStream inStream = conn.getInputStream();//通過輸入流獲取圖片資料
         byte[] btImg = readInputStream(inStream);//得到圖片的二進位制資料
         return btImg;
     } catch (Exception e) {
        e.printStackTrace();
     }
     return null;
 }

/**
* 從輸入流中獲取資料
* @param inStream 輸入流
* @return
* @throws Exception
*/
public static byte[] readInputStream(InputStream inStream) throws Exception{
  ByteArrayOutputStream outStream = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while( (len=inStream.read(buffer)) != -1 ){
      outStream.write(buffer, 0, len);
  }
  inStream.close();
  return outStream.toByteArray();
}

}