【问题标题】:Unable to Downloading zip file无法下载 zip 文件
【发布时间】:2018-01-24 18:18:39
【问题描述】:

我一直在尝试使此代码正常工作,并且现在还浏览了 stackoverflow 一段时间但无法找到答案。希望你能帮忙。

尝试从 Internet 下载 zip 文件,但结果是 1 kb 的 zip 文件。

更新:我试过 Long.MAX_VALUE,但结果是一样的。我真的不确定出了什么问题。普通文本文件仅适用于文件,但不适用于 zipfile。请帮忙。

private static void testDownload() {

    try {
        URL website = new URL("http://www.sec.gov/Archives/edgar/data/1027884/000102788418000013/0001027884-18-000013-xbrl.zip");
        ReadableByteChannel rbc = Channels.newChannel(website.openStream());
        FileOutputStream fos = new FileOutputStream("C:\\0001027884-18-000013-xbrl.zip");
        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
    }catch(Exception e){
        System.out.println("EXCEPTION: " + e.getMessage());
        System.exit(2);
    }   
}

【问题讨论】:

标签: java zipfile


【解决方案1】:

使用 transferFrom() 可能比从源通道读取并写入此通道的简单循环更有效。许多操作系统可以直接将字节从源通道传输到文件系统缓存中,而无需实际复制它们。

注意:transferFrom 中的第三个参数是要传输的最大字节数。 Integer.MAX_VALUE 最多传输 2^31 个字节,Long.MAX_VALUE 最多允许传输 2^63 个字节(比现有的任何文件都大)。

所以,当您指定 1024 时,我认为这就是您的 zip 文件大小为 1 KB 的原因。请尝试指定 Long.MAX_VALUE 。

希望这能解决您的问题。

【讨论】:

  • 亲爱的萨希尔,谢谢。但是我之前尝试过 Long.MAX_VALUE 但结果是一样的。 1kb 压缩文件
  • 伙计们,我已经尝试了几个代码。还是一样的结果。它总是生成一个 1 kb 的 zip 文件,其内容如下: 301 Moved Permanently

    永久移动

    文档已移动 sec.gov/Archives/edgar/data/1035443/000103544317000022/…>


    Apache Server at www.sec.gov端口 80
【解决方案2】:

好的,大家终于根据压缩包中的输出找到了问题所在。

只需将 HTTP 转换为 HTTPS 即可解决问题

【讨论】:

  • 好的,所以浏览器会自动将请求转换为 https,这就是我们能够从浏览器下载它的原因。
猜你喜欢
  • 2020-02-07
  • 2018-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多