解決Jsoup下載圖片大小隻有1M的問題
阿新 • • 發佈:2018-12-15
簡述
想搞些好看的圖片下來,用作寫文章,工具還是選用jsoup,簡單易用,但發現個問題,如下圖,有的圖片只下載一半,剛開始以為下載姿勢不對,後來發現是jsoup限制。
解決
- 執行下面程式碼,輸出1048576,約1M,這個是jsoup預設大小。
String url = "https://d3cbihxaqsuq0s.cloudfront.net/images/17935469_xl.jpg";
System.out.println(Jsoup.connect(url).request().maxBodySize());
- 1
- 2
- 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
- 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
效果
原文 地址https://blog.csdn.net/yy1193889747/article/details/79070465