`

将文件通过SFTP方式上传到FTP服务器的Action<br>

 
阅读更多
package com.ecc.liana.innermanage.file;

import java.io.File;
import java.io.FileInputStream;

import org.apache.log4j.Logger;

import com.ecc.emp.core.Context;
import com.ecc.emp.core.EMPException;
import com.ecc.liana.base.LianaAction;
import com.ecc.liana.base.LianaConstants;
import com.ecc.liana.base.LianaStandard;
import com.ecc.liana.exception.TranFailException;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
/**
 * 将文件通过SFTP方式上传到FTP服务器的Action<br>
 * 
 * @version 1.0 2013-05-03
 * @author wangxx@yuchengtech.com
 */
public class SftpUploadAction extends LianaAction {
	Session session = null;
    Channel channel = null;
    /**
	 * FTP 数据传输超时时间
	 */
	private int timeout = 0;
    /**
	 * 保存本地文件名称
	 */
	private String localFileNameField;
	
    private static final Logger LOG = Logger.getLogger(SftpUploadAction.class.getName());
	@Override
	public String execute(Context context) throws EMPException {
		// TODO Auto-generated method stub
		
        ChannelSftp sftp = null;
        try{	
        	String fileName = (String)context.getDataValue(localFileNameField);
        	
        	String localPath = LianaStandard.getSelfDefineSettingsValue("localFilePath");
        	String remotepath = LianaStandard.getSelfDefineSettingsValue("remoteFilePath");
        	String sftpHost = LianaStandard.getSelfDefineSettingsValue("SftpHost");
            String port = LianaStandard.getSelfDefineSettingsValue("SftpPort");
            String sftpUserName = LianaStandard.getSelfDefineSettingsValue("SftpUserName");
            String sftpPassword = LianaStandard.getSelfDefineSettingsValue("SftpPassword");
            String sftpTimeout = LianaStandard.getSelfDefineSettingsValue("SftpTimeout");
            if (sftpTimeout != null && !sftpTimeout.equals("")) {
            	timeout = Integer.valueOf(sftpTimeout);
            }
            
            int sftpPort = 22;
            if (port != null && !port.equals("")) {
                sftpPort = Integer.valueOf(port);
            }
        	
        	JSch jsch = new JSch(); // 创建JSch对象
        	session = jsch.getSession(sftpUserName, sftpHost, sftpPort); // 根据用户名,主机ip,端口获取一个Session对象
        	LOG.debug("Session created.");
        	if (sftpPassword != null) {
                session.setPassword(sftpPassword); // 设置密码
            }
        	java.util.Properties config = new java.util.Properties();  
        	config.put("StrictHostKeyChecking", "no"); 
        	session.setConfig(config); 
            session.setTimeout(timeout); // 设置timeout时间
            session.connect(); // 通过Session建立链接
            LOG.debug("Session connected.");

            LOG.debug("Opening Channel.");
            channel = session.openChannel("sftp"); // 打开SFTP通道
            channel.connect(); // 建立SFTP通道的连接
            sftp = (ChannelSftp) channel;
            LOG.debug("Connected successfully to ftpHost = " + sftpHost + ",as ftpUserName = " + sftpUserName
                    + ", returning: " + channel);
            LOG.debug("开始上传图片文件-->>"+fileName);
			uploadBySftp(remotepath,localPath+fileName,sftp);
			LOG.debug(fileName+" 上传成功......");

        }catch(JSchException sex){
        	LOG.error("SftpUploadAction.execute() 文件上传...上传失败:"+sex.getMessage());
        	// context.setDataValue("errorCode", "EBIM1801");
        	throw new TranFailException( "EBIM1801","文件上传失败");
        }catch(Exception e){
        	LOG.error("SftpUploadAction.execute() 文件上传...执行失败:"+e.getMessage());
        	// context.setDataValue("errorCode", "EBIM1802");
        	throw new TranFailException( "EBIM1802","文件上传执行失败");
        }finally{
			releaseResource( session , channel );
		}

		return DEFAULT_RETURN_VALUE;
	}
	/**
	* 上传文件
	* @param directory 上传的目录
	* @param uploadFile 要上传的文件
	* @param sftp
	*/
	public void uploadBySftp(String directory, String uploadFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			File file=new File(uploadFile);
			sftp.put(new FileInputStream(file), file.getName());
			} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * @desc 释放资源
	 * @param session
	 * @param channel
	 */
	protected void releaseResource(Session session,Channel channel) {
        if (channel != null) {
            channel.disconnect();
            LOG.debug("channel released...");
        }
        if (session != null) {
            session.disconnect();
            LOG.debug("session realsed...");
        }
    }
	
	public void setLocalFileNameField(String localFileNameField) {
		this.localFileNameField = localFileNameField;
	}
	
}

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SecureCRT

    SecureCRT 是高度可定制的终端仿真器,适用于 Internet 和... 文件传输工具:&lt;br&gt;&lt;br&gt; VCP 和 VSFTP 命令行公用程序让使用 SFTP 的文件传输更安全。&lt;br&gt;&lt;br&gt; . 脚本支持:&lt;br&gt;&lt;br&gt; 支持 VBScript 和 JScript 脚本语言。

    sftp连接池和springboot启动器.rar

    sftp 命令可以通过 ssh 来上传和下载文件,是常用的文件传输工具,它的使用方式与 ftp 类似,但它使用 ssh 作为底层传输协议,所以安全性比 ftp 要好得多。 常用方式 格式:sftp &lt;host&gt; 通过 sftp 连接 &lt;host&gt;,...

    EditPlus v2.31 fixpack

    This is a patch file to fix the bugs of EditPlus v2.31&lt;br&gt;&lt;br&gt;Copyright © 1998-2007 ES-Computing&lt;br&gt;Contact: support@editplus.com&lt;br&gt;Homepage: http://www.editplus.com/&lt;br&gt;&lt;br&gt;INSTALLATION&lt;br&gt;========...

    java 导出csv文件并上传sftp

    本篇文章将深入探讨如何使用univocity-parsers库来创建CSV文件,以及如何利用JSCH库将生成的CSV文件上传到SFTP(Secure File Transfer Protocol)服务器。 首先,让我们了解univocity-parsers库。这是一个强大的...

    sftp安全文件传输

    - `sftp -oPort=&lt;port&gt; &lt;user&gt;@&lt;host&gt;`:连接到主机`&lt;host&gt;`,使用指定用户`&lt;user&gt;`和端口`&lt;port&gt;`。 2. **操作命令**: - `help` 或 `/`:显示帮助信息。 - `pwd`:查看远程服务器的当前工作目录。 - `lpwd`:...

    windows脚本SFTP上传文件至备份服务器方案

    ### Windows脚本SFTP上传文件至备份服务器方案 #### 概述 在当前的信息安全环境中,数据备份成为了保障业务连续性和数据安全的重要手段之一。传统的FTP传输方式由于其明文的身份验证机制,已经不能满足支付行业的...

    java实现导出csv文件并上传sftp

    本篇文章将深入探讨如何使用Java实现CSV文件的生成,并将其通过SFTP(Secure File Transfer Protocol)协议上传到指定服务器。 首先,我们要介绍的是用于生成CSV文件的库:univocity-parsers。这是一个高效、灵活且...

    springboot以FTP方式上传文件到远程服务器的流程

    在本文中,我们将介绍如何使用 Spring Boot 实现 FTP 上传文件到远程服务器的流程。这个流程包括如何使用 JWT 登录认证及鉴权的流程,以及如何使用 Spring Security 实现动态数据验证及权限分配。 一、环境准备工作...

    使用前端插件上传文件到ftp服务器

    本教程将深入探讨如何使用前端插件实现文件上传到FTP(File Transfer Protocol)服务器的过程,这是一个广泛用于文件传输的标准协议。我们将讨论关键概念、步骤以及可能涉及的技术。 ### FTP简介 FTP是一种在...

    java通过sftp模式实现FTP的文件上传下载删除功能

    本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的文件上传、下载和删除功能。 一、SFTP简介 SFTP与传统的FTP不同,FTP在明文传输数据,存在安全隐患,而SFTP则利用SSH提供的加密机制,确保数据在传输过程中的...

    在服务器上通过SFTP方式,跨区读取另一台服务器上的文件.zip

    之前做的FTP读取服务器上文件,后来为了安全,将ftp方式改成了SFTP。 我现在是,要读取服务器文件是按时在某个文件夹中存放最新的文件,我这里设定时间,每隔5分钟读取一次。 在服务器上通过SFTP方式,跨区读取另一...

    FTP服务器单文件绿色版FTPServer

    FTP服务器是一种用于在互联网上进行文件传输的服务,它允许用户从一台计算机(客户端)向另一台计算机(服务器)上传或下载文件。FTP(File Transfer Protocol)是这项服务的基础协议,它是一个标准网络协议,用于在...

    在windows上用bat自动拉取服务器上的文件

    - `get &lt;远程文件路径&gt; &lt;本地文件路径&gt;`:从远程服务器下载文件到本地。 - `rm &lt;远程文件路径&gt;`:删除远程服务器上的文件。 - `-hostkey=*`:自动接受未知的主机密钥,用于解决首次连接时的确认问题。 #### 三、...

    java中生成xml文件,并上传至ftp服务器

    JAVA中生成xml文件到指定路径和上传到ftp服务器到指定路径的方法。

    SFTP定时扫描本地文件上传到Linux服务器

    【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...

    java 读取FTP服务器文件

    FTP提供了一种可靠的方式来传输文件,使得应用程序可以远程访问和操作存储在FTP服务器上的数据。以下是一份详细的Java FTP文件读取教程,涵盖了相关的重要知识点。 1. **FTP库的选择**: Java标准库中并没有内置...

    FTP,SFTP文件上传,下载到服务器,ZIP文件压缩,加密,解密,然后再上传到服务器,各种封装操作;

    这里我们详细探讨一下"FTP,SFTP文件上传,下载到服务器,ZIP文件压缩,加密,解密,然后再上传到服务器"这一主题。 首先,FTP(File Transfer Protocol)是一种标准网络协议,用于在Internet上进行文件传输。它允许...

    【kettle012】kettle访问FTP服务器文件并处理数据至PostgreSQL

    总结起来,这个示例展示了如何利用Kettle完成一个完整的数据处理流程:从FTP服务器下载文件,使用转换进行数据预处理,然后通过PostgreSQL JDBC驱动将处理后的数据加载到PostgreSQL数据库中。这个过程对于需要定期从...

    java sftp文件上传

    Java SFTP文件上传是通过Java编程语言实现与Secure File Transfer Protocol(SFTP)服务器进行交互,将本地文件安全地传输到远程服务器的过程。SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络上安全...

Global site tag (gtag.js) - Google Analytics