1. 程式人生 > >解決Jsoup下載圖片大小隻有1M的問題

解決Jsoup下載圖片大小隻有1M的問題

多麼美的一張圖啊

簡述

想搞些好看的圖片下來,用作寫文章,工具還是選用jsoup,簡單易用,但發現個問題,如下圖,有的圖片只下載一半,剛開始以為下載姿勢不對,後來發現是jsoup限制。

解決

  1. 執行下面程式碼,輸出1048576,約1M,這個是jsoup預設大小。
String url = "https://d3cbihxaqsuq0s.cloudfront.net/images/17935469_xl.jpg";
System.out.println(Jsoup.connect(url).request().maxBodySize());
  • 1
  • 2
  1. jsoup有帶個方法設定大小maxBodySize(3000000),可根據自己情況設定
Connection.Response execute = Jsoup.connect(url).ignoreContentType(true).maxBodySize(3000000).ignoreHttpErrors(true).execute();
byte[] bytes = execute.bodyAsBytes();
Map<String, String> headers = execute.headers();
System.out.println(headers.toString());
System.out.println(bytes.length);
IOUtils.write(bytes,new FileOutputStream("../photo/" + 1223 + ".jpg"));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. jsoup下載圖片有兩種方式,bodyAsBytes(),bodyStream(),檔案比較大時選用後者,因為有帶快取。檔案讀寫直接用的commons-io工具類
String url = "https://d3cbihxaqsuq0s.cloudfront.net/images/17935469_xl.jpg";
System.out.println(Jsoup.connect(url).request().maxBodySize());
Long start = System.currentTimeMillis();
byte[] bytes = Jsoup.connect(url).ignoreContentType(true).maxBodySize(3000000).ignoreHttpErrors(true).execute().bodyAsBytes();
IOUtils.write(bytes,new FileOutputStream("../photo/" + 1223 + ".jpg"));
System.out.println(System.currentTimeMillis()-start);
start = System.currentTimeMillis();
BufferedInputStream bufferedInputStream = Jsoup.connect(url).ignoreContentType(true).maxBodySize(3000000).ignoreHttpErrors(true).execute().bodyStream();
IOUtils.copyLarge(bufferedInputStream,new FileOutputStream("../photo/" + 12233 + ".jpg"));
System.out.println(System.currentTimeMillis()-start);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

效果

great

原文 地址https://blog.csdn.net/yy1193889747/article/details/79070465