当具有相同名称的文件已存在时,带有get命令的sftp outbound-gateway将引发异常

时间:2015-04-23 15:26:41

标签: spring-integration

我正在尝试使用sftp出站网关从远程sftp服务器下载文件。这是网关配置:

override func layoutSubviews() {
    cardSetup();    
}

func cardSetup(){
    self.cardView.layer.masksToBounds = false;
    self.cardView.layer.cornerRadius = 4; // if you like rounded corners

    //%%% This is a little hard to explain, but basically, it lowers the performance required to build shadows.  If you don't use this, it will lag
    var path: UIBezierPath = UIBezierPath(roundedRect: self.cardView.layer.bounds, cornerRadius: 4)
    self.cardView.layer.shadowPath = path.CGPath

    self.cardView.layer.shadowOffset = CGSizeMake(-0.4, 0.4); //%%% this shadow will hang slightly down and to the right
    self.cardView.layer.shadowRadius = 1;
    self.cardView.layer.shadowOpacity = 0.2;




}

如果已存在同名的本地文件,我想将其替换为新下载的文件。这就是我将模式设置为" REPLACE"的原因。相反,我得到一个例外:

<int-sftp:outbound-gateway id="downloadGateway"                 
                command="get" 
                command-options="-P"
                expression="payload.remoteDirectory + payload.filename"
                session-factory="cachingSessionFactory"
                local-directory="downloads"
                auto-create-directory="true"
                use-temporary-file-name="true"
                mode="REPLACE"                  
                local-filename-generator-expression="#remoteFileName + '.' + @currentDate.getDateStr()"
                />

我是否正确假设当网关与put命令一起使用时,mode属性适用于远程文件?有没有办法让我用sftp出站网关实现我正在寻找的行为?

2 个答案:

答案 0 :(得分:0)

有趣;你的是本周的第二个请求。

目前,除了自己删除文件(或将文件提取到临时目录,然后使用文件出站适配器移动它们 - 其中 提供替换模式)之外,没有其他解决办法

我前几天打开JIRA Issue添加此功能。

实际上,网关上存在mode属性是一个错误,目前已被忽略。

答案 1 :(得分:0)

它是一个旧线程,但如果您正在寻找模式的有效值,这里它们是(参考:org.springframework.integration.file.support.FileExistsMode):

var request;
// ..

if (request) { abort(request); request = null; }
request = firebase.database().ref("item1/").once("value", callback);