CCC*_*CCC 8 google-app-engine google-cloud-storage google-cloud-platform google-cloud-dataflow gcsfuse
有些文件每天都会上传到FTP服务器,我需要在Google云端存储下使用这些文件.我不想让上传文件的用户安装任何其他软件,让他们继续使用他们的FTP客户端.有没有办法将GCS用作FTP服务器?如果没有,我如何创建一个定期从FTP位置获取文件并将它们放入GCS的作业?换句话说:最好和最简单的方法是什么?
cra*_*ick 10
您可以自己编写一个上传到GCS的FTP服务器,例如基于pyftpdlib
定义一个自定义处理程序,在收到文件时存储到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()
Run Code Online (Sandbox Code Playgroud)
我已成功在Google容器引擎上运行它(它需要一些努力才能使被动FTP正常工作)但在Compute Engine上应该非常简单.根据上述配置,在防火墙上打开端口21和端口60000-60999.
要运行它,python my_ftp_server.py
- 如果你想在端口21上侦听,你将需要root权限.
我已经在 Google Compute 的虚拟机中使用 gcsfs 成功设置了 GCS 的 FTP 代理(jkff在我的问题的评论中提到),具体说明如下: http: //ilyapimenov.com/blog/2015/01/19/ ftp-proxy-to-gcs.html
但需要进行一些更改:
一些可能出现的问题:
另外,您的 ftp 客户端需要使用设置为“被动”的传输模式。
归档时间: |
|
查看次数: |
17162 次 |
最近记录: |