2

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も試しました。

4

2 に答える 2

2

アップロードされたファイルが壊れていました。バイナリ転送モードでアップロードしようとしました。圧縮転送モードに変更した後、ファイルを処理できるようになりました。

于 2012-11-13T23:18:06.687 に答える
0

ダウンロードしたファイルをどのように「解凍」するか教えてください。あなたがダウンロードしたファイルは.tar.gzであり、zip形式ではないので、.tar.gzを.zipファイルとして追加しようとしていると思いますが、これは機能しないはずです。.tar.gzファイルを抽出する場合は、次の質問を参照してください 。Javaでtarファイルを抽出するにはどうすればよいですか。

于 2012-11-13T00:26:15.093 に答える