解决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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值