有些文件每天都會上傳到FTP服務器,我需要Google雲端存儲下的這些文件。我不想讓上傳文件的用戶安裝任何額外的軟件,只讓他們繼續使用他們的FTP客戶端。 有沒有辦法使用GCS作爲FTP服務器?如果不是,我該如何創建一個定期從FTP位置獲取文件並將其放入GCS的作業?換句話說:什麼是最好和最簡單的方法來做到這一點?FTP到Google存儲區
回答
我已經使用成功地建立了一個FTP代理GCS gcsfs在谷歌計算(由jkff在我的問題的評論中提及)虛擬機,這些指令: http://ilyapimenov.com/blog/2015/01/19/ftp-proxy-to-gcs.html
是雖然需要做一些改變:
- 在/etc/vsftpd.conf文件變化#WRITE_ENABLE = YES
到 WRITE_ENABLE = YES - 添加防火牆規則在GC項目,讓 訪問端口21和被動端口15393到15592(https://console.cloud.google.com/networking/firewalls/list)
一些可能出現的問題:
- 如果您可以訪問使用本地IP FTP服務器,而不是遠程IP,這可能是因爲你還沒有設置防火牆規則
- 如果可以交流但是無法寫入,這可能是因爲你需要write_enable = YES如果你試圖讀取你在/ mnt上創建的文件夾,但得到一個I/O錯誤,可能是因爲桶中的gcsfs_config是不正確的。
此外,您的ftp客戶端需要使用傳輸模式設置爲「被動」。
我們這樣做了,但是在所有現成的FTP解決方案中都存在着大量的間歇性錯誤。最終得出的唯一結果是pyftpdlib,我們在保險絲安裝的GCS上運行。 –
你可以寫自己哪個上傳到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權限。
這個文件應該放在哪裏?用戶如何使用ftp客戶端進行身份驗證(主機名,用戶名,密碼是什麼)? – CCC
我認爲crazystick表示用戶使用FTP服務器進行身份驗證,但是您正在運行的FTP服務器具有將對象上載到GCS的憑據。所以你寫FTP服務器,FTP服務器將上傳流轉發到GCS。 –
是的 - 查看pyftpdlib的文檔,您會發現許多用於身份驗證的選項。在上面的示例中,每個人都將使用用戶名「user」和密碼「password」連接到FTP服務器,並且所有文件都將被轉儲到具有默認安全性的同一個GCS存儲桶中。在計算引擎/容器引擎上運行得到GCS的憑證 – crazystick
,你可以設置一個cron和使用gsutil rsync或開源rclone tool FTP服務器和谷歌雲存儲之間rsync的。
如果不能定期運行FTP服務器上的這些命令,你可以安裝FTP服務器作爲一個本地文件系統或驅動器(Linux,Windows)
- 1. Maven FTP存儲庫
- 2. Google App Engine數據存儲區編碼?
- 3. Google App Engine數據存儲區 - 主鍵
- 4. Google數據存儲區限制
- 5. Google App Engine在線數據存儲區
- 6. Azure網站 - 將存儲(blob)和ftp附加到該存儲
- 7. Google雲端存儲 - 應用程序中的存儲區權限
- 8. 圖像不存儲在FTP
- 9. FTP上的Mercurial存儲庫
- 10. 加密的FTP存儲
- 11. CNAME到s3存儲區amazon
- 12. 連接到Google App Engine數據存儲區
- 13. Appengine - 上傳到Google Spreadsheet數據存儲區值
- 14. 將數據從Google數據存儲區(GAE)遷移到Google Cloud SQL
- 15. 在Google應用引擎數據存儲區中保存數據
- 16. 自動備份到Google雲端存儲 - Google App Engine數據存儲與cron.yaml
- 17. 將Google數據存儲備份從數據存儲加載到Google BigQuery
- 18. AWS存儲區和區域
- 19. Google Appengine雲存儲
- 20. 使用CloudFlare將CDN存儲到Google雲端存儲桶
- 21. 將文件從git傳輸到Google雲存儲存儲桶
- 22. Google Developers Console - 報告的數據存儲區存儲數據量的差異
- 23. 如何在Google App Engine數據存儲區中存儲非ASCII字符
- 24. 如何在Google App Engine數據存儲區中存儲多維數組
- 25. Google雲端存儲 - 將訪問令牌限制爲單個存儲區
- 26. 如何使用OAuth 2.0訪問Google存儲中的共享存儲區
- 27. 如何使用Firebase存儲上傳到現有的Google雲存儲存儲桶?
- 28. Google雲端存儲Java沒有將文件存儲到存儲空間
- 29. 上傳文件到Google雲端存儲
- 30. 使用Google NDB連接到雲存儲
看起來像一種方法是在虛擬機上設置FTP服務器並使用gcsfs將此服務器連接到GCS,如http://ilyapimenov.com/blog/2015/01/19/ftp-proxy- to-gcs.html - 爲您工作嗎? – jkff