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)
    ......

ローカルホストから Google Cloud Storage ファイルにアクセスする方法を知っている人はいますか?

4

3 に答える 3

7

App Engine デベロッパー テスト環境は、Google Cloud Storage のローカル シミュレーションをサポートしていますが、実物への RPC アクセスは提供していません。そのため、コードは両方の環境で動作するはずですが、2 つのモードは別個の名前空間と内容を持つものと考える必要があります。したがって、たとえば、コードでオブジェクト bar を含む特定のバケット foo が表示されることを期待している場合は、そのバケット/オブジェクトを個別に作成し、ローカル開発者モードが期待どおりに機能するために適切なコンテンツが含まれていることを確認する必要があります。

于 2012-03-18T01:31:45.697 に答える
0

上記のシミュレートされたサービスを見つけて使用することができました。残念ながら、このスレッドでは、私は Java を知りません。しかし、Pythonでの使用法は次のとおりです...

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

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

他の誰かが、Java で同じことを行う方法を理解する必要があります。ごめん。:(

編集: api_server.py はベース ディレクトリにあります。

$ python2.7 google_appengine/api_server.py
于 2012-08-24T06:35:39.943 に答える
-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());

    }

}

たとえば、フォームを複数回送信する代わりに、サーブレットをループで呼び出すことができるようになりました。

于 2012-04-06T16:00:17.213 に答える