使用Jsoup下载图片、PDF和压缩等文件时,需要将响应转换为输出流。转换为输出流的目的是增强写文件的能力,即以字节为单位写入指定文件。 以图片下载为例,程序3-12使用bodyStream()方法将响应转换为输出流,并以缓冲流的方式写入指定文件。另外,针对图片和PDF等文件,在执行URL请求获取Response时,必须通过ignoreContentType(boolean ignoreContentType)方法设置忽略响应内容的类型,否则会报错。
//程序3-12 public class JsoupConnectInputstream { public static void main(String[] args) throws IOException { String imageUrl = "https://www.leichuangkj.com/img/WechatIMG2.png"; Connection connect = Jsoup.connect(imageUrl); Connection.Response response = connect.method(Connection.Method.GET).ignoreContentType(true).execute(); System.out.println("文件类型为:" + response.contentType()); //如果响应成功,则执行下面的操作 if (response.statusCode() == 200) { //响应转化成输出流 BufferedInputStream bufferedInputStream = response.bodyStream(); //保存图片 saveImage(bufferedInputStream,"/Users/steven/Documents/代码/project/spider/src/main/java/com/file/1.jpg"); } } /** * 保存图片操作 * @param inputStream * @param savePath * @throws IOException */ static void saveImage(BufferedInputStream inputStream, String savePath) throws IOException { byte[] buffer = new byte[1024]; int len = 0; //创建缓冲流 FileOutputStream fileOutStream = new FileOutputStream(new File(savePath)); BufferedOutputStream bufferedOut = new BufferedOutputStream(fileOutStream); //图片写入 while ((len = inputStream.read(buffer, 0, 1024)) != -1) { bufferedOut.write(buffer, 0, len); } //缓冲流释放与关闭 bufferedOut.flush(); bufferedOut.close(); } }运行程序3-12,如下图所示,将在控制台输出响应文件的类型,并且图片会被下载到程序指定的路径下。