2017-09-09 215 views
0

我在使用ftpUpload()函數RCurl將文件上傳到SFTP中不存在的文件夾時遇到問題。我想要使​​用ftp.create.missing.dirs選項來創建文件夾。這裏是我的代碼目前:無法使用RCurl創建文件夾

.opts <- list(ftp.create.missing.dirs=TRUE) 

ftpUpload(what = "test.txt", 
to "sftp://ftp.testserver.com:22/newFolder/existingfile.txt", 
userpwd = paste(user, pwd, sep = ":"), .opts = opts)` 

它似乎並不奏效,因爲我得到以下錯誤:

* Initialized password authentication 
* Authentication complete 
* Failed to close libssh2 file 

我可以將文件上傳到存在的文件夾的成功,它只是當文件夾不在那裏我得到錯誤。

回答

1

這個問題似乎是由於您正在嘗試創建新文件夾的事實,因爲在這個問題上看到:Create an remote directory using SFTP/RCurl

錯誤可以在Microsoft R打開git的頁面中發現:

case SSH_SFTP_CLOSE: 
    if(sshc->sftp_handle) { 
    rc = libssh2_sftp_close(sshc->sftp_handle); 
    if(rc == LIBSSH2_ERROR_EAGAIN) { 
     break; 
    } 
    else if(rc < 0) { 
     infof(data, "Failed to close libssh2 file\n"); 
    } 
    sshc->sftp_handle = NULL; 
    } 
    if(sftp_scp) 
    Curl_safefree(sftp_scp->path); 

在代碼中,參數rclibssh2_sftp_close函數(此處更多信息https://www.libssh2.org/libssh2_sftp_close_handle.html)有關,它會嘗試關閉不存在的目錄,從而導致錯誤。

嘗試使用curlPerform爲:

curlPerform(url="ftp.xxx.xxx.xxx.xxx/";, postquote="MkDir /newFolder/", userpwd="user:pass") 
+0

許多感謝。這很有道理。你知道一種方法,我可以用'RCurl'在SFTP上創建一個文件夾,而不需要上傳文件嗎?謝謝! – Freddie1

+0

嗨!我添加了一個可能的選擇,看一看。 –

+1

是的!有效。不過,我需要做一點改動才能使用'R Studio'工作。這是我的輕微改編,以防它適用於任何人: 'curlPerform(url =「ftp.xxx.xxx.xxx.xxx/」,postquote =「MkDir/newFolder /」,userpwd =「user:pass 「) 剛將'MKD'改爲'MkDir'並且'引用'爲'postquote',但原始原則仍然完好無損! 非常感謝,再次 – Freddie1