2012-03-17 9 views
6

Google Cloud Storageにファイルを書き込んで読み込むだけで成功しました。私はappspotをアプリに展開した後にすべてが正常であるが、それがローカルで実行するとき、私はエラーを得た:あなたのいずれか1つがローカルホストからGoogleクラウドストレージファイルにアクセスする方法をローカルで稼働しているアプリケーションからCloud Storageファイルにアクセスする方法

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アクセスは提供していません。したがって、あなたのコードは両方の環境で動作するはずですが、2つのモードは別々の名前空間と内容を持つと考えるべきです。たとえば、コードでオブジェクトバーを含む特定のバケットfooが表示されることを期待している場合は、そのバケット/オブジェクトを個別に作成し、ローカル開発者モードが期待通りに機能するように合理的な内容が含まれていることを確認します。

-1

ローカルで(コマンドラインのように) "擬似"実行するには、最初に展開してからHttpClientを使用してサーバーに接続する必要があります。今あなたが持っているでしょうあなたが

サンプルコードの添付ファイルでフォームを提出する必要があり、コマンドラインからのサーブレット/ 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()); 

    } 

} 

[あなたは確かにそれより創造的な取得することができます]フォームを複数回送信するのではなく、ループ内でサーブレットを呼び出す機能

0

上記のシミュレートされたサービスを見つけて使用できました。残念ながらこのスレッドでは、私はJavaを知らない。しかし、それはPythonでの使用だ次のようである...

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

(そのapi_server.pyに注意してください、それはargparseモジュールに依存するためのPython 2.7が必要です。)他

誰かが行う方法を把握する必要がありますJavaで同じです。ごめんなさい。 :(

EDIT: api_server.pyは、ベースディレクトリにある:

$ python2.7 google_appengine/api_server.py 
関連する問題