fengzhizi715/NetDiscovery

FileDownloader的下载文件

Closed this issue · 3 comments

 ByteArrayOutputStream baos = Utils.cloneInputStream(inputStream);
 InputStream is = new ByteArrayInputStream(baos.toByteArray());  // 只针对小的文件使用,大型的文件不建议这样使用

我做了实验,如果是60M左右的apk,下载是会失败的,下载的文件是缺少内容的
如果是大的文件,你有什么建议么?

搜了下相关的资料,看到了一个CloseShieldInputStream类,不过我实验没有生效

之所以在FileDownloader中不推荐下载大文件,是因为FileDownloader会把inputStream传到Spider中。
如果是大文件,你可以自己写一个downloader,在downloader里面直接做文件下载的操作。不需要把流传到Spider中,让AfterRequest或者Pipeline对文件进行下载。

另外,下载的时候使用一个较小的缓冲区。
例如:byte[] buffer = new byte[1024]

恩,我觉得也是,直接在downloader中下载就行了,没必要放到AfterRequest中,多谢指教