sftp连接--文件下载

public class TftpUtil {
private Log log = LogFactory.getLog(this.getClass());
private ChannelSftp sftp;
private Channel channel;
private Session session;

/**
 * @param args
 * @throws InterruptedException
 * @throws ParseException
 * @throws IOException
 */
public TftpUtil() {

// sftp = connect(host, port , username, password);
// sftp.disconnect();
}

/**
 * 连接sftp服务器
 * 
 * @param host
 *            主机
 * @param port
 *            端口
 * @param username
 *            用户名
 * @param password
 *            密码
 * @return
 */
public ChannelSftp connect(String host, int port, String username,
        String password) {
    ChannelSftp sftp = null;
    try {
        JSch jsch = new JSch();
        jsch.getSession(username, host, port);
        session = jsch.getSession(username, host, port);
        log.info("Session created.");
        session.setPassword(password);
        Properties sshConfig = new Properties();
        sshConfig.put("StrictHostKeyChecking", "no");
        session.setConfig(sshConfig);
        session.connect();
        log.info("Session connected.");
        log.info("Opening Channel.");
        channel = session.openChannel("sftp");
        channel.connect();
        sftp = (ChannelSftp) channel;


        log.info("Connected to " + host + ".");
    } catch (Exception e) {
        e.printStackTrace();
    }
    return sftp;
}


public void uploadFile(String ftpPath, String fileName, String localPath) {
    try {
        sftp.get(ftpPath + fileName, fileName);
        sftp.getInputStream();
    } catch (Exception e) {
        e.printStackTrace();
        log.info("download error.");
    } finally {
        sftp.quit();
        channel.disconnect();
        session.disconnect();
        sftp.disconnect();
    }
}

/**
 * download 从ftp下载文件到本地
 * 
 * @throws java.lang.Exception
 * @return
 * @param newfilename
 *            本地生成的文件名
 * @param filename
 *            服务器上的文件路径+文件名
 */
public long ftpdownload(String filename, HttpServletResponse response)
        throws Exception {
    long result = 0;
    InputStream is = null;
    OutputStream out = null;
    try {
        is=sftp.get(filename);
        out = response.getOutputStream();
        byte[] bytes = new byte[1024];
        int c;
        while ((c = is.read(bytes)) != -1) {
            out.write(bytes, 0, c);
            result = result + c;
        }
        out.flush();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (is != null) {
            is.close();
        }
        if (out != null) {
            out.close();
        }
    }
    return result;
}


public ChannelSftp getSftp() {
    return sftp;
}


public void setSftp(ChannelSftp sftp) {
    this.sftp = sftp;
}

// 触发servlet
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
String id= req.getParameter(“id”);
if(StringUtils.isBlank(id)){
throw new Exception(“唯一标识不能为空”);
}

        // 文件路径
        String fileName = "文件所在路径-全路径地址";

        String downFilename = fileName.substring(fileName.lastIndexOf("/")+1);

        resp.setContentType("application/octet-stream");
        String urlFileName = URLEncoder.encode(downFilename, "UTF-8");


        resp.setHeader("Content-Disposition", "attachment;filename=\""
                + urlFileName);
        TftpUtil tftp = new TftpUtil();
        // host port username password配置文件
        ChannelSftp sftp = tftp.connect(TFTP_HOST,TFTP_PORT, TFTP_USERNAME,TFTP_PASSWORD);

        tftp.setSftp(sftp);
        tftp.ftpdownload(fileName, resp);
    }catch(CommonException e){
        log.error(e);
        if(e.getErrCode().equals(RcmsErrorCode.ERROR_CODE_TLRNO_SESSION_INVALID)){
            resp.sendRedirect(req.getContextPath() + "/common/expired.jsp");
        }else{
            resp.sendRedirect(req.getContextPath() + "/common/error.jsp");
        }
        return;
    }catch(FileNotFoundException e){
        log.error(e);
        resp.sendRedirect(req.getContextPath() + "/common/error.jsp");
        return;
    }catch (Exception e) {
        log.error(e);
        resp.sendRedirect(req.getContextPath() + "/common/error.jsp");
        return;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Laravel 中使用 SFTP文件下载到本地,可以使用 `league/flysystem-sftp` 扩展包来实现。以下是一个简单的示例: ```php use Illuminate\Support\Facades\Storage; use League\Flysystem\Sftp\SftpAdapter; // 配置 SFTP 连接参数 $config = [ 'host' => 'example.com', 'port' => 22, 'username' => 'username', 'password' => 'password', 'root' => '/path/to/files', ]; // 创建 SFTP 适配器 $adapter = new SftpAdapter($config); // 创建文件系统实例 $filesystem = new \Illuminate\Filesystem\Filesystem($adapter); // 下载文件到本地 $filesystem->get('remote_file.txt', 'local_file.txt'); ``` 在上面的示例中,我们首先配置了 SFTP 连接参数,然后创建了一个 `SftpAdapter` 实例,用于连接到远程 SFTP 服务器。然后,我们创建了一个 `Filesystem` 实例,用于在远程和本地文件系统之间进行操作。最后,我们使用 `get` 方法将远程文件 `remote_file.txt` 下载到本地文件 `local_file.txt`。 请注意,如果要在 Laravel 中使用 SFTP,您还需要在 `config/filesystems.php` 文件中配置 SFTP 驱动程序。例如: ```php 'sftp' => [ 'driver' => 'sftp', 'host' => 'example.com', 'port' => 22, 'username' => 'username', 'password' => 'password', 'root' => '/path/to/files', 'timeout' => 10, ], ``` 一旦配置完成,您可以像这样使用 `Storage` Facade 下载文件: ```php use Illuminate\Support\Facades\Storage; Storage::disk('sftp')->get('remote_file.txt', 'local_file.txt'); ``` 这将使用 `sftp` 驱动程序从远程 SFTP 服务器下载文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值