2016-09-27 40 views
0

我使用Python的FTPLIB時上傳的小文本文件到FTP站點時,收到以下錯誤:無法通過ftp使用python FTPLIB文件,但成功的使用curl

 File "ftpuploader.py", line 13, in uploadFilePath 
    ftp.storbinary("STOR {}".format(filepath), file) 
    File "/usr/lib64/python2.7/ftplib.py", line 471, in storbinary 
    conn = self.transfercmd(cmd, rest) 
    File "/usr/lib64/python2.7/ftplib.py", line 376, in transfercmd 
    return self.ntransfercmd(cmd, rest)[0] 
    File "/usr/lib64/python2.7/ftplib.py", line 358, in ntransfercmd 
    resp = self.sendcmd(cmd) 
    File "/usr/lib64/python2.7/ftplib.py", line 249, in sendcmd 
    return self.getresp() 
    File "/usr/lib64/python2.7/ftplib.py", line 224, in getresp 
    raise error_perm, resp 
ftplib.error_perm: 553 Could not create file. 

我成功地使用下面的代碼當連接到另一個系統時。我可以登錄,更改目錄,但無法創建文件。我可以加載使用FileZilla的兩種或簡單curl命令文件,捲曲-T '/路徑/到/文件' ftp://192.168.18.75 --user管理員:密碼

ftp = FTP(address) 
ftp.login(username, password) 
ftp.cwd('/gui') 
file = open(filepath, 'rb') 
ftp.storbinary("STOR {}".format(filepath), file) 
ftp.retrlines('LIST') # list directory contents  
file.close() 
ftp.quit() 

什麼想法?

+0

試試這個,讓我知道,如果它的工作原理: ftp.storbinary( 'STOR文件路徑',打開(文件路徑,「RB ')) –

+1

'filepath'是否只包含文件名?如果不是,請嘗試'「STOR {}」。格式(os.path.basename(filepath))'。 – acw1668

+0

如果你提供的不僅僅是「無法ftp」,它會有幫助,即你得到的錯誤信息或類似的「超時」或類似的東西。它可能與被動模式和主動模式有關,但是不可能說沒有錯誤描述。 –

回答

2

您正在將路徑傳遞到STOR命令的本地路徑(與open(filepath, 'rb')使用的路徑相同)。

使用CURL時,您不指定任何路徑到遠程文件。所以文件被上傳到當前的FTP工作目錄。

正如@ acw1668在評論中已經建議,使用:

ftp.storbinary("STOR {}".format(os.path.basename(filepath)), file) 
+0

一個額外的評論,我不得不在Python中創建ftplib ftp連接時顯式設置被動模式爲True。該文檔提到它默認啓用,但無論文檔如何,我都必須聲明該模式是明確被動的。 https://docs.python.org/2/library/ftplib.html – kernelK