【问题标题】:Tar.gz corrupts after downloading using commons.net FTPClientTar.gz 使用 commons.net FTPClient 下载后损坏
【发布时间】:2012-11-01 09:13:19
【问题描述】:

我正在尝试从 FTP 服务器(通过 HTTP 代理)下载 tar.gz 文件。虽然已经处理了通过代理连接的麻烦(我能够从 FTP 站点读取常规文件),但我能够将文件下载到我的桌​​面(显然是开发人员机器)。但是当我尝试膨胀该文件时,我遇到了一个异常。下面是我的代码sn-ps

if (CollectionUtils.isNotEmpty(filesList)) {
    for (String fileName : filesList) {
        if (fileName.endsWith(getArchiveFileType())) {
            // File is a tar.gz file.
            // Download this file to a local directory
            FtpDownloadMethod downloadMethod = new FtpDownloadMethod();
            OutputStream output = new FileOutputStream(getOutputDirectory() + fileName);
            downloadMethod.setFileTransferMode(FTPClient.COMPRESSED_TRANSFER_MODE);
            downloadMethod.setOutput(output);
            downloadMethod.setUri(fileName);
            isDownloaded = isDownloaded && getServiceProxy().executeMethod(downloadMethod).isSuccess();
            output.close();
        }
    }
}

这是进行传输的实际方法。

String uri; //method arguements
OutputStream output; //method arguements

DefaultFtpResponse response = null;

try {
    response = new DefaultFtpResponse();

    boolean success = false;

    if (StringUtils.isBlank(getUri())) {
        response.setStatusCode(FTPReply.FILE_UNAVAILABLE);
    } else {
        aFtpClient.connect();
        aFtpClient.enterLocalPassiveMode();
        aFtpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
        aFtpClient.setFileTransferMode(getFileTransferMode());
        success = aFtpClient.retrieveFile(uri, output);
        response.setSuccess(success);
        response.setStatusCode(FTPReply.COMMAND_OK);
    }
} catch (Exception exp) {
    LOGGER.error(exp);
}

return response;

此代码创建一个文件,我可以看到在所需的输出文件夹中创建了一个文件。下载后,当我尝试解压缩下载的文件时,我看到此错误。

    java.util.zip.ZipException: oversubscribed literal/length tree

我也尝试了 BLOCK_TRANSFERR_MODE 和 BINARY_TRANSFER_MODE。

【问题讨论】:

    标签: java ftp gzip ftp-client apache-commons-net


    【解决方案1】:

    请问您如何“解压缩”下载的文件?正如您所提到的,下载的文件是 .tar.gz,它不是 zip 格式,所以我认为您正在尝试将 .tar.gz 提取为 .zip 文件,这应该不起作用。如果要解压 .tar.gz 文件,可以参考这个问题: How do I extract a tar file in Java?

    【讨论】:

    • 这正是我正在做的。事实上,我在这样做之前提到了同一个帖子。我可能会尝试,我尝试使用 WinZip 解压缩 tar.gz 文件。即使这样,我也无法打开 gzip 文件。同样,在上传到 FTP 站点之前,我使用 WinZip 打开了 tar.gz 文件。我怀疑上传可能损坏了文件。我使用相同的 FTP 客户端实例以二进制格式重新加载了文件。
    • @Sriram 您是否尝试将文件保存到磁盘,并与您上传的文件进行比较?
    • 谢谢雷蒙德。最初上传的文件已损坏。以压缩模式重新上传就可以了。
    【解决方案2】:

    上传的文件已损坏。我试图以二进制传输模式上传。将其更改为压缩传输模式后,我可以处理文件了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-05
      • 2015-10-12
      • 2018-04-08
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 2019-06-08
      相关资源
      最近更新 更多