使用commons.net FTPClient下载后,tar.gz会破坏

时间:2012-11-12 22:01:26

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

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

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。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

我可以知道你是怎么解开"解压缩"下载的文件?正如你所提到的,下载的文件是.tar.gz,它不是zip格式的,所以我认为你试图将.tar.gz作为.zip文件取代,这应该不起作用。如果要提取.tar.gz文件,可以参考以下问题: How do I extract a tar file in Java?