2

我使用 JSoup 来解析带有 cookie 的网站。我想使用 JSoup 从网站下载一个文件,并使用这段代码保存在哈希图中的 cookie:

Connection.Response res = Jsoup.connect("http://www.webpage.com/downloadpage).execute();
Map<String, String> cookies = res.cookies();

所以当我尝试下载文件时,我使用这个:

downloadFile(Jsoup.connect("http://www.webpage.com/file.ext).cookies(cookies).ignoreContentType(true).execute().bodyAsBytes());

private void downloadFile(byte[] fileByteArray) {
    try {
        File temprFile = File.createTempFile("tempfile", "ext", getCacheDir());
        temprFile.deleteOnExit();
        FileOutputStream fos = new FileOutputStream(temprFile);
        fos.write(fileByteArray);
        fos.close();

        }  catch (MalformedURLException e){
            e.printStackTrace();
        } catch (IOException ex) {
        String s = ex.toString();
        ex.printStackTrace();
    }
}

程序运行没有错误,但是当我尝试打开临时文件时,文件似乎不完整。每次,恰好下载 1.408.576 个字节。例如,当我以这种方式下载 mp3 文件时,临时文件只包含原始文件的 40 秒。我在这里想念什么?

帮助将不胜感激。谢谢。

4

2 回答 2

5

猜猜我很快就来这里问我的问题。我自己在 JSoup 的 GitHub 文档中找到了解决方案。无论如何,感谢您的回复! https://github.com/jhy/jsoup/blob/master/src/main/java/org/jsoup/Connection.java

/**
 * Set the maximum bytes to read from the (uncompressed) connection into the body, before the connection is closed,
 * and the input truncated. The default maximum is 1MB. A max size of zero is treated as an infinite amount (bounded
 * only by your patience and the memory available on your machine).
 * @param bytes number of bytes to read from the input before truncating
 * @return this Connection, for chaining
 */
public Connection maxBodySize(int bytes);

不管怎么说,还是要谢谢你!

于 2013-04-16T15:20:45.907 回答
0

我添加了 0maxBodySize(0)并下载了完整的视频。例子Jsoup.connect(url).maxBodySize(0).ignoreContentType(true).execute().bodyAsBytes()

于 2019-10-13T21:52:04.483 回答