From 2129eddf5eff324b61f4e8b2b24222ee852d31e4 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 19 Nov 2010 18:10:29 -0500 Subject: [PATCH] INT-1614 added file-name/path tokenezation to FtpSession --- .../integration/ftp/session/FtpSession.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java index 8504d81a42..e191845f2b 100644 --- a/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java +++ b/spring-integration-ftp/src/main/java/org/springframework/integration/ftp/session/FtpSession.java @@ -16,6 +16,7 @@ package org.springframework.integration.ftp.session; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -29,6 +30,7 @@ import org.apache.commons.net.ftp.FTPFile; import org.springframework.integration.file.remote.session.Session; import org.springframework.util.Assert; +import org.springframework.util.StringUtils; /** * @author Mark Fisher @@ -109,16 +111,30 @@ public class FtpSession implements Session { } public void put(InputStream inputStream, String destination) { + String originalWorkDir = null; try { - // TODO: - // String originalDirectory = this.client.printWorkingDirectory() - // tokenize destination into 'directory' and 'file' - // then changeWorkingDirectory(directory) - this.client.storeFile(destination, inputStream); + String fileName = StringUtils.getFilename(destination); + int startOfFileName = destination.lastIndexOf(File.separatorChar); + + if (startOfFileName > 0) { + originalWorkDir = client.printWorkingDirectory(); + String pathname = destination.substring(0, startOfFileName); + client.changeWorkingDirectory(pathname); + } + this.client.storeFile(fileName, inputStream); } catch (IOException e) { throw new IllegalStateException("failed to copy file", e); } + finally { + if (originalWorkDir != null){ + try { + this.client.changeWorkingDirectory(originalWorkDir); + } catch (IOException ioex) { + throw new IllegalStateException("failed to change working directories ", ioex); + } + } + } } }