1

有些文件每天都會上傳到FTP服務器,我需要Google雲端存儲下的這些文件。我不想讓上傳文件的用戶安裝任何額外的軟件,只讓他們繼續使用他們的FTP客戶端。 有沒有辦法使用GCS作爲FTP服務器?如果不是,我該如何創建一個定期從FTP位置獲取文件並將其放入GCS的作業?換句話說:什麼是最好和最簡單的方法來做到這一點?FTP到Google存儲區

+1

看起來像一種方法是在虛擬機上設置FTP服務器並使用gcsfs將此服務器連接到GCS,如http://ilyapimenov.com/blog/2015/01/19/ftp-proxy- to-gcs.html - 爲您工作嗎? – jkff

回答

1

我已經使用成功地建立了一個FTP代理GCS gcsfs在谷歌計算(由jkff在我的問題的評論中提及)虛擬機,這些指令: http://ilyapimenov.com/blog/2015/01/19/ftp-proxy-to-gcs.html

是雖然需要做一些改變:

一些可能出現的問題:

  • 如果您可以訪問使用本地IP FTP服務器,而不是遠程IP,這可能是因爲你還沒有設置防火牆規則
  • 如果可以交流但是無法寫入,這可能是因爲你需要write_enable = YES如果你試圖讀取你在/ mnt上創建的文件夾,但得到一個I/O錯誤,可能是因爲桶中的gcsfs_config是不正確的。

此外,您的ftp客戶端需要使用傳輸模式設置爲「被動」。

+0

我們這樣做了,但是在所有現成的FTP解決方案中都存在着大量的間歇性錯誤。最終得出的唯一結果是pyftpdlib,我們在保險絲安裝的GCS上運行。 –

4

你可以寫自己哪個上傳到GCS基於pyftpdlib

FTP服務器,例如定義當接收到的文件存儲到GCS自定義處理程序

import os 
from pyftpdlib.handlers import FTPHandler 
from pyftpdlib.servers import FTPServer 
from pyftpdlib.authorizers import DummyAuthorizer 
from google.cloud import storage 

class MyHandler: 
    def on_file_received(self, file): 
     storage_client = storage.Client() 
     bucket = storage_client.get_bucket('your_gcs_bucket') 
     blob = bucket.blob(file[5:]) # strip leading /tmp/ 
     blob.upload_from_filename(file) 
     os.remove(file) 
    def on_... # implement other events 

def main(): 
    authorizer = DummyAuthorizer() 
    authorizer.add_user('user', 'password', homedir='/tmp', perm='elradfmw') 

    handler = MyHandler 
    handler.authorizer = authorizer 
    handler.masquerade_address = add.your.public.ip 
    handler.passive_ports = range(60000, 60999) 

    server = FTPServer(("127.0.0.1", 21), handler) 
    server.serve_forever() 

if __name__ == "__main__": 
    main() 

我已經成功運行這在谷歌容器引擎(它需要一些努力讓被動FTP正常工作),但它應該是非常簡單的在計算引擎上。根據以上配置,打開防火牆上的端口21和端口60000 - 60999。

要運行它,python my_ftp_server.py - 如果要在端口21上偵聽,則需要root權限。

+0

這個文件應該放在哪裏?用戶如何使用ftp客戶端進行身份驗證(主機名,用戶名,密碼是什麼)? – CCC

+0

我認爲crazystick表示用戶使用FTP服務器進行身份驗證,但是您正在運行的FTP服務器具有將對象上載到GCS的憑據。所以你寫FTP服務器,FTP服務器將上傳流轉發到GCS。 –

+0

是的 - 查看pyftpdlib的文檔,您會發現許多用於身份驗證的選項。在上面的示例中,每個人都將使用用戶名「user」和密碼「password」連接到FTP服務器,並且所有文件都將被轉儲到具有默認安全性的同一個GCS存儲桶中。在計算引擎/容器引擎上運行得到GCS的憑證 – crazystick

1

,你可以設置一個cron和使用gsutil rsync或開源rclone tool FTP服務器和谷歌雲存儲之間rsync的

如果不能定期運行FTP服務器上的這些命令,你可以安裝FTP服務器作爲一個本地文件系統或驅動器(LinuxWindows