解决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. 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. 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);

效果

great
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。