web-dev-qa-db-ja.com

Google App Engineでは、サーバー上にファイルやフォルダーを作成できますか?

Google App Engineが空き容量を提供していることは知っていますが、データベースにデータを保存するためだけのものなのか、それともサーバー側にデータを保存するためのファイルやディレクトリを作成できるのでしょうか。たとえば、次の方法を使用してファイルを保存できますか?

  public static void saveFile(String File_Path,StringBuffer Str_Buf,boolean Append)
  {
    FileOutputStream fos=null;
    BufferedOutputStream bos=null;

    try
    {
      fos=new FileOutputStream(File_Path,Append);
      bos=new BufferedOutputStream(fos);
      for (int j=0;j<Str_Buf.length();j++) bos.write(Str_Buf.charAt(j));
    }
    catch (Exception e) { e.printStackTrace(); }
    finally
    {
      try 
      {
        if (bos!=null)
        {
          bos.close();
          bos=null;
        }
        if (fos!=null)
        {
          fos.close();
          fos=null;
        }
      }
      catch (Exception ex) { ex.printStackTrace(); }
    }
  }
23
Frank

自分のプロジェクトからファイルを読み取ることができます- ファイルシステムに書き込むことはできません

FAQ.。

このファイルに書き込めないのはなぜですか?

アプリケーションの分散性のため、ローカルファイルへの書き込みはAppEngineではサポートされていません。代わりに、永続化する必要のあるデータを分散データストアに保存する必要があります。詳細については、ランタイムサンドボックスのドキュメントを参照してください。

AppEngineアプリケーションは次のことはできません。

  • ファイルシステムに書き込みます。アプリケーションは、永続データを保存するためにAppEngineデータストアを使用する必要があります。ファイルシステムからの読み取りが許可され、アプリケーションとともにアップロードされたすべてのアプリケーションファイルが利用可能になります。

  • ソケットを開くか、別のホストに直接アクセスします。アプリケーションは、App EngineのURLフェッチサービスを使用して、ポート80と443で他のホストにそれぞれHTTPリクエストとHTTPSリクエストを送信できます。

  • サブプロセスまたはスレッドを生成します。アプリケーションへのWebリクエストは、数秒以内に1つのプロセスで処理する必要があります。 Webサーバーの過負荷を回避するために、応答に非常に長い時間がかかるプロセスは終了します。

  • 他の種類のシステムコールを作成します。

28
Romain Hippeau

いいえ、ファイルI/Oは許可されていません。ブロブを使用して画像やテキストを保存できます。

5
Daniyar

新情報。答えは「はい」ですが、書き込みアクセスにはクラウドストレージを使用する必要があります。通常のファイルを目的に使用することはできません。

https://developers.google.com/appengine/docs/Java/googlecloudstorageclient/

Python APIとRESTfulAPIもあります。

4
Bin He

ファイルAPIを使用したblobstoreへの書き込み 現在は非推奨 であり、Googleはクラウドストレージに移行していることに言及する必要があると思います。

1
Hari Ganesan

Google App Engineは、スケーラブルでステートレスであることを目的としています。

スケーラブルとは、複数の並列インスタンスが開始/シャットダウン/リサイクル(弾性)されることを意味します。そのため、1つのインスタンスがローカルのSQLite DBにデータを書き込む場合、他の並列インスタンスはデータを表示または認識できません。これは不整合につながるため、そのようなサービスを利用することはできません。

その結果、アプリエンジンの外部で、ネットワークを介してデータ(状態)を永続的なストレージ(firebaseまたはcloud sqlまたはcloud storageまたはredis)に書き込む必要があります。

「オールアットワンプレイス」のコンピューティングストレージとローカルストレージの利便性が必要な場合は、ブロックストレージでVM)をスピンする必要があります。

0
Thyag