2012-10-06 18 views
3

在谷歌应用程序引擎有什么办法通过FTP获取文件或有一个文件 通过FTP连接到应用程序?我希望能够将数据发送给仅支持FTP的供应商。通过GAE中的FTP数据

有什么建议吗?我感谢所有帮助和/或想法,任何人有

感谢 Abhijeet

+0

不,不过,appengine平台仅限于HTTP。 (套接字在路上) – fredrik

+0

当我们在几年前设计应用程序时,在我们开始使用应用程序引擎之前,我遇到了同样的问题(没有FTP)。我们的解决方案:供应商登录后通过电子邮件通知下载数据。 – voscausa

回答

-1

FTP是不是有什么可现在AppEngine上,但你可以使用一个复杂的解决方案。

  1. 将您的数据作为文件导出到Google云端存储。使用Appengine FileService很容易。您可以使用AppEngine Pipelines库来管理此过程。
  2. 创建Google Compute Engine实例。它是一个虚拟机,您可以在其中创建套接字并使用您需要的软件。
  3. 在计算引擎实例上安装FTP服务器。
  4. 计算引擎可以访问云存储,以便您可以通过FTP将文件提供给第三方客户端。

这是一个复杂的过程,但它仍然可以帮助解决您的问题。

+0

也许一个完整的App Engine解决方案将可用。看到这篇关于App Engine套接字可信测试程序的文章:http://googleappengine.blogspot.in/2012/09/app-engine-172-released.html – voscausa

+0

不,“FTP不支持。”来源:https://cloud.google.com/appengine/docs/java/sockets/ – xamde

0

编写一个ftp代理并在Google Cloud Engine上运行它。

2

此限制用于驱动我坚果,但从April 9 this year (SDK 1.7.7)这不再是一个问题。出站套接字(例如FTP)通常可用于所有启用结算功能的应用程序。

概述(Python)的:https://developers.google.com/appengine/docs/python/sockets/

+1

为了进一步阐明,这意味着您可以使用FTP库这样的Python库来通过FTP发送和接收文件。去过也做过。很棒。 –

+0

@JudeOsborn你能告诉我你是如何设法在ftp服务器上存储文件的吗?我总是以'连接超时'结束...... – aschmid00

+1

@ aschmid00:不知道这是否是最漂亮的解决方案,但我曾经有过相同的问题。在[snippet](http://pastebin.com/2kfK1dbv)中,我在第22行的前面的评论中提到了你,我每隔60秒左右都会向远程服务器发送一个“NOOP”命令。我经常需要保持连接长达10分钟(慢驴FTP服务器),这就解决了我的问题。自那以后没有超时错误。 – mblomdahl

0

这里是我已经在GAE测试的作品FTP代码(计费启用)

Python

#!/usr/bin/env python 
from google.appengine.ext import webapp 
from ftplib import FTP 

class HwHandler(webapp.RequestHandler): 
    def get(self): 
     self.response.out.write('FTP Starting...<br>') 
     ftp = FTP('ftp_site.com') 
     ftp.login('login', 'password') 
     ftp.set_pasv(False) 
     ftp.retrlines('LIST') # list directory contents 
     self.response.out.write('FTP opened') 
     ftp.quit() 

app = webapp.WSGIApplication([ 
    ('/', HwHandler) 
], debug=True) 

Php

<?php 
/* set the FTP hostname */ 
$user = "test"; 
$pass = "myFTP"; 
$host = "example.com"; 
$file = "test.txt"; 
$hostname = $user . ":" . $pass . "@" . $host . "/" . $file; 

/* the file content */ 
$content = "this is just a test."; 

/* create a stream context telling PHP to overwrite the file */ 
$options = array('ftp' => array('overwrite' => true)); 
$stream = stream_context_create($options); 

/* and finally, put the contents */ 
file_put_contents($hostname, $content, 0, $stream); 
?> 

我稍后将更新为Java &去。

+0

这甚至可以工作? '''ftp.set_pasv(False)'''但我们无法在沙盒AppEngine中创建监听套接字... – user3355018

+0

Java的任何更新? –