2012-03-17 138 views
6

我刚刚成功将文件写入Google云存储并读取它。一切都很好,当我部署应用Appspot上,而是运行它的本地时,我得到的错误:如何从本地运行的应用程序访问云存储文件

INTERNAL_SERVER_ERROR 
    Caused by:java.io.IOException 
     at com.google.appengine.api.files.FileServiceImpl.translateException(FileServiceImpl.java:586) 
     at com.google.appengine.api.files.FileServiceImpl.makeSyncCall(FileServiceImpl.java:561) 
    ...... 

请问你知道如何从本地主机访问谷歌云存储文件中的任何一个?

回答

7

App Engine开发人员测试环境支持本地模拟Google Cloud Storage,但不提供对真实事物的RPC访问。所以,你的代码应该可以在两种环境中工作,但是你应该将两种模式看作具有不同的名称空间和内容。因此,例如,如果您的代码希望看到包含对象栏的特定存储桶foo,则您需要单独创建该存储桶/对象,并确保其中包含合理的内容,以便本地开发人员模式按预期工作。

-1

要在本地“伪”运行它(如在命令行上),首先应该部署它,然后使用HttpClient连接到您的服务器。你可以在命令行中你的servlet/JSP互动,而不必与文件附件提交表单

示例代码方式[你肯定能比这更富有创造性]

import java.io.ByteArrayOutputStream; 
import java.io.File; 
import java.io.IOException; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.client.methods.HttpUriRequest; 
import org.apache.http.entity.mime.MultipartEntity; 
import org.apache.http.entity.mime.content.FileBody; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.apache.http.client.ClientProtocolException; 


public class FileUploaderClient { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) throws ClientProtocolException, IOException{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://<app-version>.<app-name>.appspot.com/<servlet-name>"); 
     MultipartEntity reqEntity = new MultipartEntity(); 
     FileBody bin = new FileBody(new File("<File you want to upload>")); 
     reqEntity.addPart("file", bin); 
     httppost.setEntity(reqEntity); 
     HttpResponse response = httpclient.execute(httppost); 
     System.out.println(response.getStatusLine()); 

    } 

} 

现在你将有能够在循环中调用您的servlet,而不是多次提交表单

0

我能够找到并使用上面提到的模拟服务。不幸的是,对于这个线程,我不知道Java。但它的用法在Python是如下...

$ python2.7 google_appengine/google/appengine/tools/api_server.py --application myapp 

(请注意,api_server.py需要Python 2.7,因为它取决于argparse模块。)

某些别有用心的人将要弄清楚怎么办在Java中也是一样。抱歉。 :(

编辑: 的api_server.py是在基目录:

$ python2.7 google_appengine/api_server.py 
相关问题