繁体   English   中英

用java下载的文件太小

[英]with java downloaded file is too small

我使用此代码段下载了一些mp3文件:

File target = /*...*/;
InputStream in = new URL(link).openStream();
Files.copy(in, target.toPath(), StandardCopyOption.REPLACE_EXISTING);

它通常可以正常工作,但是现在我有一系列文件,这些文件太小而无法使用。 例如: https ://kritisches-denken-podcast.de/wp-content/uploads/2019/01/KDP-Episode-17-Selbsterhaltungstherapie.mp3应该约为46MB(当我通过浏览器下载时),但只有315MB当我在Android上使用上面的代码下载字节时。

URL中内置了重定向。 通常,此类重定向(尤其是针对非浏览器的URL(显然是mp3 URL))被用作HTTP 301“永久移动”(有时是302“临时移动”),并且在Location标头。 您看到的文本(您下载的315字节)仅仅是“后备” HTML,它也表明内容已移动。 幸运的是,没有必要对此进行解析。

URL的openStream代码的HTTP“浏览器”非常基本,并且不遵循重定向。 您需要有一个API。 URLConnection(也来自核心库)可以做到这一点,但是如果重定向从http切换到https,反之亦然,它就不会跟随重定向,因此您可能不想这样做。 万一您这样做:

File target = /*...*/;
HttpURLConnection con = (HttpURLConnection) new URL(link).openConnection();
con.setInstanceFollowRedirects(true);
try (InputStream in = con.getInputStream()) {
    Files.copy(in, target.toPath(), StandardCopyOption.REPLACE_EXISTING);
}

如果上述方法不好(大概是由于HTTP / HTTPS重定向问题),我建议选择一个标准的API不能提供的真实HTTP客户端。 我建议OkHttp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM