[ 
https://issues.apache.org/jira/browse/VFS-620?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15402912#comment-15402912
 ] 

stevezhuang commented on VFS-620:
---------------------------------

Hi Bernd,

Thanks for your checking/replying.

The URLs are correct because the FileObject could be returned and operated. 
And the target Directory is writable (if not existing, it will be created). 
Actually it will work correctly if applying my suggested fix. 

I believe it would be an issue related to the "UserDirIsRoot" setting, VFS 
didn't handle it well when doing the rename.

Best wishes,
Steve





> FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP
> -------------------------------------------------------------------
>
>                 Key: VFS-620
>                 URL: https://issues.apache.org/jira/browse/VFS-620
>             Project: Commons VFS
>          Issue Type: Bug
>    Affects Versions: 2.1
>         Environment: ubuntu vsftpd
>            Reporter: stevezhuang
>
> FileObject.moveTo(FileObject) API doesn't work well for a Linux FTP, 
> especially for setting a user directory as its root directory case,
> For example, for a ubuntu vsftpd, which is having "/home/user1" as its root 
> directory, when renaming "/test/test.txt" to "/test1/test1.txt", it will 
> throw an exception.
> In this case, it should consider the workingDirectory(would be "/home/user1") 
> together and append it to the from/to path to make the API work.
> Sample codes,
> FileObject fileObject = null;
>         FileObject toFileObject = null;
>         try {
>             StandardFileSystemManager fsManager = new 
> StandardFileSystemManager();
>             fsManager.init();
>             FileSystemOptions fsOpts = new FileSystemOptions();
>             FtpFileSystemConfigBuilder.getInstance().setPassiveMode(fsOpts, 
> true);
>             FtpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(fsOpts, 
> true);
>             UserAuthenticator auth = new StaticUserAuthenticator(null, 
> "<user>", "<password>");
>             
> DefaultFileSystemConfigBuilder.getInstance().setUserAuthenticator(fsOpts, 
> auth);
>             fileObject = fsManager.resolveFile("ftp://<Replaced 
> address>/test/test.txt", fsOpts);
>             System.out.println("File exists:" + fileObject.exists());
>             toFileObject = fsManager.resolveFile("ftp://<Replaced 
> address>/test1/test1.txt", fsOpts);
>             System.out.println("File exists:" + toFileObject.exists());
>             if (!toFileObject.exists()) {
>                 toFileObject.createFile();
>             }
>             fileObject.moveTo(toFileObject);
>         } catch (FileSystemException ex) {
>             ex.printStackTrace();
>         } finally {
>             if (fileObject != null) {
>                 try {
>                     fileObject.close();
>                 } catch (FileSystemException ex) {
>                 }
>             }
>             if (toFileObject != null) {
>                 try {
>                     toFileObject.close();
>                 } catch (FileSystemException ex) {
>                 }
>             }
>         }
> And the output,
> File exists:true
> File exists:false
> org.apache.commons.vfs2.FileSystemException: Could not rename 
> "ftp://<Replaced address>/test/test.txt" to "ftp://<Replaced 
> address>/test1/test1.txt".
>       at 
> org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1902)
>       at TestFTP.main(TestFTP.java:59)
> Caused by: org.apache.commons.vfs2.FileSystemException: Could not rename FTP 
> file "ftp://<Replaced address>/test/test.txt" to "ftp://<Replaced 
> address>/test1/test1.txt".
>       at 
> org.apache.commons.vfs2.provider.ftp.FtpFileObject.doRename(FtpFileObject.java:524)
>       at 
> org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1887)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to