Search in sources :

Example 31 with SftpException

use of com.jcraft.jsch.SftpException in project DataX by alibaba.

the class SftpHelperImpl method getOutputStream.

@Override
public OutputStream getOutputStream(String filePath) {
    try {
        this.printWorkingDirectory();
        String parentDir = filePath.substring(0, StringUtils.lastIndexOf(filePath, IOUtils.DIR_SEPARATOR));
        this.channelSftp.cd(parentDir);
        this.printWorkingDirectory();
        OutputStream writeOutputStream = this.channelSftp.put(filePath, ChannelSftp.APPEND);
        String message = String.format("打开FTP文件[%s]获取写出流时出错,请确认文件%s有权限创建,有权限写出等", filePath, filePath);
        if (null == writeOutputStream) {
            throw DataXException.asDataXException(FtpWriterErrorCode.OPEN_FILE_ERROR, message);
        }
        return writeOutputStream;
    } catch (SftpException e) {
        String message = String.format("写出文件[%s] 时出错,请确认文件%s有权限写出, errorMessage:%s", filePath, filePath, e.getMessage());
        LOG.error(message);
        throw DataXException.asDataXException(FtpWriterErrorCode.OPEN_FILE_ERROR, message);
    }
}
Also used : OutputStream(java.io.OutputStream) ByteArrayOutputStream(java.io.ByteArrayOutputStream) SftpException(com.jcraft.jsch.SftpException)

Example 32 with SftpException

use of com.jcraft.jsch.SftpException in project hadoop by apache.

the class SFTPFileSystem method listStatus.

/**
   * Convenience method, so that we don't open a new connection when using this
   * method from within another method. Otherwise every API invocation incurs
   * the overhead of opening/closing a TCP connection.
   */
@SuppressWarnings("unchecked")
private FileStatus[] listStatus(ChannelSftp client, Path file) throws IOException {
    Path workDir;
    try {
        workDir = new Path(client.pwd());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    Path absolute = makeAbsolute(workDir, file);
    FileStatus fileStat = getFileStatus(client, absolute);
    if (!fileStat.isDirectory()) {
        return new FileStatus[] { fileStat };
    }
    Vector<LsEntry> sftpFiles;
    try {
        sftpFiles = (Vector<LsEntry>) client.ls(absolute.toUri().getPath());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    ArrayList<FileStatus> fileStats = new ArrayList<FileStatus>();
    for (int i = 0; i < sftpFiles.size(); i++) {
        LsEntry entry = sftpFiles.get(i);
        String fname = entry.getFilename();
        // skip current and parent directory, ie. "." and ".."
        if (!".".equalsIgnoreCase(fname) && !"..".equalsIgnoreCase(fname)) {
            fileStats.add(getFileStatus(client, entry, absolute));
        }
    }
    return fileStats.toArray(new FileStatus[fileStats.size()]);
}
Also used : Path(org.apache.hadoop.fs.Path) FileStatus(org.apache.hadoop.fs.FileStatus) SftpException(com.jcraft.jsch.SftpException) ArrayList(java.util.ArrayList) IOException(java.io.IOException) LsEntry(com.jcraft.jsch.ChannelSftp.LsEntry)

Example 33 with SftpException

use of com.jcraft.jsch.SftpException in project hadoop by apache.

the class SFTPFileSystem method rename.

/**
   * Convenience method, so that we don't open a new connection when using this
   * method from within another method. Otherwise every API invocation incurs
   * the overhead of opening/closing a TCP connection.
   *
   * @param channel
   * @param src
   * @param dst
   * @return rename successful?
   * @throws IOException
   */
private boolean rename(ChannelSftp channel, Path src, Path dst) throws IOException {
    Path workDir;
    try {
        workDir = new Path(channel.pwd());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    Path absoluteSrc = makeAbsolute(workDir, src);
    Path absoluteDst = makeAbsolute(workDir, dst);
    if (!exists(channel, absoluteSrc)) {
        throw new IOException(String.format(E_SPATH_NOTEXIST, src));
    }
    if (exists(channel, absoluteDst)) {
        throw new IOException(String.format(E_DPATH_EXIST, dst));
    }
    boolean renamed = true;
    try {
        channel.cd("/");
        channel.rename(src.toUri().getPath(), dst.toUri().getPath());
    } catch (SftpException e) {
        renamed = false;
    }
    return renamed;
}
Also used : Path(org.apache.hadoop.fs.Path) SftpException(com.jcraft.jsch.SftpException) IOException(java.io.IOException)

Example 34 with SftpException

use of com.jcraft.jsch.SftpException in project hadoop by apache.

the class SFTPFileSystem method create.

/**
   * A stream obtained via this call must be closed before using other APIs of
   * this class or else the invocation will block.
   */
@Override
public FSDataOutputStream create(Path f, FsPermission permission, boolean overwrite, int bufferSize, short replication, long blockSize, Progressable progress) throws IOException {
    final ChannelSftp client = connect();
    Path workDir;
    try {
        workDir = new Path(client.pwd());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    Path absolute = makeAbsolute(workDir, f);
    if (exists(client, f)) {
        if (overwrite) {
            delete(client, f, false);
        } else {
            disconnect(client);
            throw new IOException(String.format(E_FILE_EXIST, f));
        }
    }
    Path parent = absolute.getParent();
    if (parent == null || !mkdirs(client, parent, FsPermission.getDefault())) {
        parent = (parent == null) ? new Path("/") : parent;
        disconnect(client);
        throw new IOException(String.format(E_CREATE_DIR, parent));
    }
    OutputStream os;
    try {
        client.cd(parent.toUri().getPath());
        os = client.put(f.getName());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    FSDataOutputStream fos = new FSDataOutputStream(os, statistics) {

        @Override
        public void close() throws IOException {
            super.close();
            disconnect(client);
        }
    };
    return fos;
}
Also used : Path(org.apache.hadoop.fs.Path) ChannelSftp(com.jcraft.jsch.ChannelSftp) SftpException(com.jcraft.jsch.SftpException) OutputStream(java.io.OutputStream) FSDataOutputStream(org.apache.hadoop.fs.FSDataOutputStream) IOException(java.io.IOException) FSDataOutputStream(org.apache.hadoop.fs.FSDataOutputStream)

Example 35 with SftpException

use of com.jcraft.jsch.SftpException in project hadoop by apache.

the class SFTPFileSystem method mkdirs.

/**
   * Convenience method, so that we don't open a new connection when using this
   * method from within another method. Otherwise every API invocation incurs
   * the overhead of opening/closing a TCP connection.
   */
private boolean mkdirs(ChannelSftp client, Path file, FsPermission permission) throws IOException {
    boolean created = true;
    Path workDir;
    try {
        workDir = new Path(client.pwd());
    } catch (SftpException e) {
        throw new IOException(e);
    }
    Path absolute = makeAbsolute(workDir, file);
    String pathName = absolute.getName();
    if (!exists(client, absolute)) {
        Path parent = absolute.getParent();
        created = (parent == null || mkdirs(client, parent, FsPermission.getDefault()));
        if (created) {
            String parentDir = parent.toUri().getPath();
            boolean succeeded = true;
            try {
                client.cd(parentDir);
                client.mkdir(pathName);
            } catch (SftpException e) {
                throw new IOException(String.format(E_MAKE_DIR_FORPATH, pathName, parentDir));
            }
            created = created & succeeded;
        }
    } else if (isFile(client, absolute)) {
        throw new IOException(String.format(E_DIR_CREATE_FROMFILE, absolute));
    }
    return created;
}
Also used : Path(org.apache.hadoop.fs.Path) SftpException(com.jcraft.jsch.SftpException) IOException(java.io.IOException)

Aggregations

SftpException (com.jcraft.jsch.SftpException)54 ChannelSftp (com.jcraft.jsch.ChannelSftp)26 IOException (java.io.IOException)18 Path (org.apache.hadoop.fs.Path)14 File (java.io.File)13 SftpATTRS (com.jcraft.jsch.SftpATTRS)9 GenericFileOperationFailedException (org.apache.camel.component.file.GenericFileOperationFailedException)9 LsEntry (com.jcraft.jsch.ChannelSftp.LsEntry)8 JSchException (com.jcraft.jsch.JSchException)8 FileStatus (org.apache.hadoop.fs.FileStatus)8 NullProgressMonitor (org.eclipse.core.runtime.NullProgressMonitor)8 Session (com.jcraft.jsch.Session)7 FileNotFoundException (java.io.FileNotFoundException)7 CoreException (org.eclipse.core.runtime.CoreException)7 IStatus (org.eclipse.core.runtime.IStatus)7 Status (org.eclipse.core.runtime.Status)7 Channel (com.jcraft.jsch.Channel)5 OutputStream (java.io.OutputStream)5 ArrayList (java.util.ArrayList)5 Vector (java.util.Vector)5