Google App Engine是否允许在服务器上创建文件和文件夹?

时间:2010-04-22 17:34:22

标签: google-app-engine file save

我知道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(); }
    }
  }

6 个答案:

答案 0 :(得分:27)

您可以阅读自己项目中的文件 - You cannot write to the file system

来自常见问题解答...

为什么我不能写这个文件?

由于应用程序的分布式特性,App Engine不支持写入本地文件。相反,必须保留的数据应存储在分布式数据存储中。有关更多信息,请参阅运行时沙箱上的文档

App Engine应用程序不能:

  • 写入文件系统。应用程序必须使用App Engine数据存储区来存储持久数据。允许从文件系统读取,并且随应用程序上载的所有应用程序文件都可用。

  • 直接打开套接字或访问其他主机。应用程序可以使用App Engine URL提取服务分别向端口80和443上的其他主机发出HTTP和HTTPS请求。

  • 生成子流程或线程。必须在几秒钟内在单个进程中处理对应用程序的Web请求。终止需要很长时间才能响应的进程以避免Web服务器过载。

  • 进行其他类型的系统调用。

答案 1 :(得分:5)

不,不允许使用文件i / o。您可以使用blob来存储图像或文本。

答案 2 :(得分:4)

新信息。 答案是肯定的,但您必须使用其云存储进行写访问。您不能将常规文件用于您的目的。

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

它还具有Python API和RESTful API。

答案 3 :(得分:1)

我认为应该提到使用文件API is now deprecated写入blobstore,并且Google正在转向云端存储。

答案 4 :(得分:0)

Google App Engine旨在可扩展且无状态。

可伸缩意味着启动/关闭/回收(弹性)多个并行实例。因此,如果一个实例将数据写入本地SQLite数据库,则其他并行实例将看不到或不知道该数据。这将导致不一致,因此您根本无法获得此类服务。

因此,您必须通过网络将应用程序引擎外部的数据(状态)写入持久存储(firebase或cloud sql或cloud storage或redis)。

如果要方便“一站式全部”计算和本地存储,则必须使用块存储来旋转VM。

答案 5 :(得分:0)

如果您使用 /tmp 文件夹,有一种方法。但是,它会将文件存储在实例的 RAM 中,因此请注意,它会占用内存并且它是临时的(正如文件夹的名称所暗示的那样)。

更多详细信息,请参阅文档 herehere

在大多数情况下,最好使用 Google Storage。

另请注意,如果您选择灵活环境而不是标准环境,则写入文件系统没有问题(但是,请注意价格差异,例如 this)。