используйте jsoup для загрузки файла, ответ bodyStream может загрузить только один мегабайтный файл - PullRequest
0 голосов
/ 28 июня 2018

Я использую jsoup для загрузки некоторых файлов с веб-сайта, используя приведенный ниже код, я могу получить тело ответа на загрузку файла

 private HttpConnection.Response getResponse3(String url, String resource_url) throws IOException {
    Response resource_download;
    resource_download = Jsoup.connect(resource_url)
            .method(Method.GET).header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36")
            .header("Upgrade-Insecure-Requests", "1")
            .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8")
            .header("Accept-Encoding", "gzip, deflate, br")
            .header("Accept-Language", "zh-CN,zh;q=0.9,en;q=0.8")
            .header("Referer", url)
            .cookie("CASTGC", "TGT-1479-kzRU5mnAuwVmsfJFcaHDT1iIrD6V7C1kUvi6IMi")
            .followRedirects(true)
            .ignoreContentType(true)
            .execute();
    return resource_download;
}

тогда я просто возвращаю объект ответа другому методу, чтобы загрузить файл. Метод выглядит следующим образом:

        File file = new File(downloadFilePath + fileName);
        BufferedInputStream inputStream = response.bodyStream();
        FileOutputStream fos = new FileOutputStream(file);
        byte[] buffer = new byte[1024];
        int len;
        while ((len = inputStream.read(buffer)) != -1) {
            fos.write(buffer, 0, len);
        }
        inputStream.close();
        fos.close();

однако, я могу получить только один мегабайт загруженного файла, что составляет около 70M или около того. Поэтому мне интересно, почему этот код не может работать должным образом? Что с этим не так.

Я также читал некоторые советы, в которых говорилось, что лучше использовать HttpURLConnection для загрузки файлов вместо jsoup, но причина, по которой я делаю это таким образом, заключается в том, что я думаю, что jsoup может нести файлы cookie и некоторую другую информацию браузера, чтобы получить файл поток загрузки, в то время как, если я отправлю еще один запрос в файл url, я должен снова написать эти сведения и файлы cookie. Без этой информации меня обнаружат сервер, и они могут отказать мне в доступе.

1 Ответ

0 голосов
/ 28 июня 2018

Используйте .maxBodySize(0) до .execute(). https://jsoup.org/apidocs/org/jsoup/Connection.html#maxBodySize-int-

...