Example usage for org.apache.commons.net.ftp FTPClient allocate

List of usage examples for org.apache.commons.net.ftp FTPClient allocate

Introduction

In this page you can find the example usage for org.apache.commons.net.ftp FTPClient allocate.

Prototype

public boolean allocate(int bytes) throws IOException 

Source Link

Document

Reserve a number of bytes on the server for the next file transfer.

Usage

From source file:net.paissad.jcamstream.utils.FTPUtils.java

/**
 * Stores a file on the server using the given name and taking input from
 * the given InputStream./*from   w w  w. j  av  a2s  .co m*/
 * <p>
 * <b>Note</b>: The InputStream is not closed ! Feel free or responsible to
 * close it (or not) after use.
 * </p>
 * 
 * @param remoteFileName
 *            - The name that will be given to the file onto the FTP server.
 * @param in
 *            - The stream to upload the FTP server.
 * @throws IOException
 * @throws FTPException
 */
public void uploadStream(String remoteFileName, InputStream in) throws IOException, FTPException {
    FTPClient client = this.getFtpClient();
    String errMsg;

    int filesize = in.available();
    client.allocate(filesize);
    String humanFileSize = CommonUtils.humanReadableByteCount(filesize, false);
    errMsg = "Unable to allocate the amount of size " + humanFileSize + " for the file " + remoteFileName;
    this.verifyReplyCode(errMsg);

    client.storeFile(remoteFileName, in);
    errMsg = "Unable to store the file " + remoteFileName + " to the server";
    this.verifyReplyCode(errMsg);
}

From source file:org.apache.hadoop.fs.ftp.FTPFileSystem.java

@Override
public FSDataInputStream open(Path file, int bufferSize) throws IOException {
    FTPClient client = connect();
    Path workDir = new Path(client.printWorkingDirectory());
    Path absolute = makeAbsolute(workDir, file);
    FileStatus fileStat = getFileStatus(client, absolute);
    if (fileStat.isDir()) {
        disconnect(client);/*from   ww w  .  j  a  v a2s .c  o m*/
        throw new IOException("Path " + file + " is a directory.");
    }
    client.allocate(bufferSize);
    Path parent = absolute.getParent();
    // Change to parent directory on the
    // server. Only then can we read the
    // file
    // on the server by opening up an InputStream. As a side effect the working
    // directory on the server is changed to the parent directory of the file.
    // The FTP client connection is closed when close() is called on the
    // FSDataInputStream.
    client.changeWorkingDirectory(parent.toUri().getPath());
    InputStream is = client.retrieveFileStream(file.getName());
    FSDataInputStream fis = new FSDataInputStream(new FTPInputStream(is, client, statistics));
    if (!FTPReply.isPositivePreliminary(client.getReplyCode())) {
        // The ftpClient is an inconsistent state. Must close the stream
        // which in turn will logout and disconnect from FTP server
        fis.close();
        throw new IOException("Unable to open file: " + file + ", Aborting");
    }
    return fis;
}

From source file:org.apache.hadoop.fs.ftp.FTPFileSystem.java

/**
 * A stream obtained via this call must be closed before using other APIs of
 * this class or else the invocation will block.
 *///w  w  w .j  av  a2  s  .c om
@Override
public FSDataOutputStream create(Path file, FsPermission permission, boolean overwrite, int bufferSize,
        short replication, long blockSize, Progressable progress) throws IOException {
    final FTPClient client = connect();
    Path workDir = new Path(client.printWorkingDirectory());
    Path absolute = makeAbsolute(workDir, file);
    if (exists(client, file)) {
        if (overwrite) {
            delete(client, file);
        } else {
            disconnect(client);
            throw new IOException("File already exists: " + file);
        }
    }
    Path parent = absolute.getParent();
    if (parent == null || !mkdirs(client, parent, FsPermission.getDefault())) {
        parent = (parent == null) ? new Path("/") : parent;
        disconnect(client);
        throw new IOException("create(): Mkdirs failed to create: " + parent);
    }
    client.allocate(bufferSize);
    // Change to parent directory on the server. Only then can we write to the
    // file on the server by opening up an OutputStream. As a side effect the
    // working directory on the server is changed to the parent directory of the
    // file. The FTP client connection is closed when close() is called on the
    // FSDataOutputStream.
    client.changeWorkingDirectory(parent.toUri().getPath());
    FSDataOutputStream fos = new FSDataOutputStream(client.storeFileStream(file.getName()), statistics) {
        @Override
        public void close() throws IOException {
            super.close();
            if (!client.isConnected()) {
                throw new FTPException("Client not connected");
            }
            boolean cmdCompleted = client.completePendingCommand();
            disconnect(client);
            if (!cmdCompleted) {
                throw new FTPException("Could not complete transfer, Reply Code - " + client.getReplyCode());
            }
        }
    };
    if (!FTPReply.isPositivePreliminary(client.getReplyCode())) {
        // The ftpClient is an inconsistent state. Must close the stream
        // which in turn will logout and disconnect from FTP server
        fos.close();
        throw new IOException("Unable to create file: " + file + ", Aborting");
    }
    return fos;
}