【问题标题】:FTP files from Google App Engine来自 Google App Engine 的 FTP 文件
【发布时间】:2009-12-26 11:01:03
【问题描述】:

我想知道是否可以通过 FTP/SFTP 将文件从 Google App Engine 应用程序的 servlet 传输到远程 FTP/SFTP 服务器。或者也许通过在 TaskQueue 上创建一个任务......有人得到这个吗?

GAE 的文档说“尝试打开套接字或写入文件的字节码将引发运行时异常”

感谢您的宝贵时间!

【问题讨论】:

  • 您想以编程方式执行此操作吗?否则,我认为这属于 superuser.com
  • @Lex,发帖人特别说他们想从一个 servlet 中做到这一点。这个问题属于这里。

标签: google-app-engine file ftp task


【解决方案1】:

现在可以在 App Engine 上使用套接字。您可以在 App Engine 上使用 ftp 客户端库,但有一个警告。只有被动模式才能工作。此外,在被动模式下,有时第二个连接会尝试从一些服务器(如 ftp.kernel.org)会忽略的不同 IP 地址进行连接。如果失败,请重试,最终您将获得相同的 IP 地址并且可以进行传输。

【讨论】:

  • 你使用哪个库?尝试过 commons-net 但由于白名单限制它不起作用(javax.net.ServerSocketFactory)
【解决方案2】:

是的,这是可能的!我们使用它将 CSV 文件从 Google Cloud Storage 发送到第三方供应商,该供应商的系统中没有任何类型的 REST/SOAP API。以下是 Python 中的示例:

from ftplib import FTP
import cloudstorage as gcs

# Connect to vendor FTP site
ftp = FTP('www.somevendor.com','vendorusername', 'vendormypassword')

# Move into the specific folder where you want to place the file
ftp.cwd('/path_to/target_folder')

# Set the file name
filename = 'my_csv_file.csv'

# Get the file you want to FTP from Google Cloud Storage
filepath = '/myapp.appspot.com/my_csv_file.csv' 

# Open the file to prep for transfer
gcs_file = gcs.open(filepath,'r')

# Initiate the file transfer
ftp.storlines('STOR '+filename,gcs_file)

# Close the ftp connection
ftp.quit()

# Close the file
gcs_file.close()

return 'You are done...MONEY!!!'

【讨论】:

    【解决方案3】:

    GAE 的文档说“尝试打开套接字或写入文件的字节码将引发运行时异常”

    如果我没记错的话,这几乎排除了从 GAE 传输文件的可能性。

    Google 员工在此确认无法打开端口:http://groups.google.com/group/google-appengine/browse_thread/thread/21948f691660ca2/708036e7f2af595b?lnk=gst&q=ftp#708036e7f2af595b

    但如果你仔细阅读,他说打开一个端口来“监听”是不允许的。你应该试一试。我很想听听你的实验结果! :)

    【讨论】:

    • 不再正确 - 套接字现在可用。
    • 是的,我的评论在 2009 年有效。;-)
    【解决方案4】:

    您无法在 App Engine 上打开任何类型的套接字。所有传出请求都必须通过 HTTP。

    【讨论】:

    【解决方案5】:

    点击此链接

    https://cloud.google.com/appengine/docs/python/sockets/

    限制和限制的要点之一是

    不支持FTP

    我在 GAE 对不同的数据包使用不同的端口时遇到问题,是否只有在 GAE 使用相同的端口之前多次尝试解决此问题?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多