繁体   English   中英

FTPClient下载损坏的文件

[英]FTPClient download corrupted file

当通过FTPClient类文件从ftp服务器下载文件损坏时,检查初始文件(img1)和下载的文件(img2)

资源:

public class FtpClient extends FTPClient {

private String host;
private int port;
private String username;
private String password;
private boolean connected;

public FtpClient(String host, int port, String username, String password) {
    this.host = host;
    this.port = port;
    this.username = username;
    this.password = password;

    connected = connect();
}


private void verifyConnection() throws ConnectionException {
    if(!connected){
        ConnectionException ex = new ConnectionException();
        log.error(ex.getMessage());
        throw ex;
    }
}


private boolean connect(){
    try {
        //try to connect
        connect(host, port);

        if(!login(username, password)){
            logout();
            return false;
        }

        int reply = getReplyCode();

        if(!FTPReply.isPositiveCompletion(reply)){
            disconnect();
            return false;
        }
        enterRemotePassiveMode();
        setFileTransferMode(BINARY_FILE_TYPE);
        setFileType(BINARY_FILE_TYPE);

        log.debug("Remote system is " + getSystemType());
        log.debug("Current directory is " + printWorkingDirectory());

        return true;
    } catch (IOException e) {
        log.error(e.getMessage());
        e.printStackTrace();

        return false;
    }
}

public void get(String batchName, String fileName) throws IOException, ConnectionException {
    verifyConnection();
    File file = new File("/tmp/" + batchName);

    if (!file.exists()){
        boolean mkdir = file.mkdir();
        log.info("Create batch directory '{}' result: {}",batchName,  mkdir);
    }
    OutputStream outputStream = new FileOutputStream("/tmp/" + batchName + "/" + fileName);
    boolean result = retrieveFile(batchName + "/" + fileName, outputStream);

    log.debug("Retrieve file {}, result: {}", batchName + "/" + fileName, result);
    outputStream.close();
}
}

IMG1 IMG1

IMG2 IMG2

怎么了?

您对FTPClient.setFileTransferMode使用的CONSTANT错误。

setFileTransferMode(BINARY_FILE_TYPE);

就像文档说的那样:

mode-要使用的新传输模式(FTP类_TRANSFER_MODE常量之一)。

您可以使用以下之一:

  • FTP.BLOCK_TRANSFER_MODE
  • FTP.COMPRESSED_TRANSFER_MODE
  • FTP.STREAM_TRANSFER_MODE

这可能会解决您的转移问题,因为您使用的值可能是任何...

您正在传递[ 2 [10|11|12] 因此,它可能保留默认的STREAM_TRANSFER_MODE值。

暂无
暂无

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

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