【问题标题】:How do I get around that Google App Engine does not support writing files?如何解决 Google App Engine 不支持写入文件的问题?
【发布时间】:2012-08-23 00:50:52
【问题描述】:

我有一个 GAE/Python 应用程序,它是一个管理程序,允许世界各地的人们将大型 GAE 应用程序的模板文件翻译成他们的本地语言(我们不能使用自动翻译,因为涉及到许多成语等) .模板文件已被标记,各种语言的文本 sn-ps 存储在 GAE 数据存储中(涉及数千个模板文件)。

因此,我需要能够将文件写入文件夹。

我有以下代码:

with open("my_new_file.html", "wb") as fh:
    fh.write(output)

我读到 GAE 会阻止文件的写入。如果这是真的,有什么办法可以绕过它吗?

如果我不能直接编写文件,是否有人对我如何完成同样的事情有建议(例如,使用网络服务执行某种往返下载然后上传文件的操作)?

我是 GAE/Python 的新手,所以请具体说明。

感谢您的任何建议。

【问题讨论】:

  • 文件必须在文件系统上吗?我做了类似的事情,但我将文件存储在数据存储中(如果它们大于 1MB,则存储在 blobstore 中)。您可以从任何地方提取模板数据并在 GAE 应用程序中呈现它。 Titan Files 库可以为您抽象将文件写入数据存储/blobstore:code.google.com/p/titan-files

标签: google-app-engine


【解决方案1】:

您可以在数据存储区中使用 google app engine blobstore 或 BlobProperty 来存储 blob/文件

用于使用 blobstore(最大 2GB) https://developers.google.com/appengine/docs/python/blobstore/

用于使用数据存储 blob(最多 1MB) https://developers.google.com/appengine/docs/python/datastore/typesandpropertyclasses#Blob

【讨论】:

【解决方案2】:

文件系统在许多云系统中是只读的,GAE 也是。在虚拟世界中,操作系统和机器都是虚拟的,文件系统是存储任何东西的最不可靠的地方

我建议使用 BLOB、Google Cloud Storage、Google Drive 中的任何一个,甚至可以进一步设置并存储在任何外部提供商中,例如 Amazon S3 等。

【讨论】:

  • GAE 文件系统不是临时的,它是只读的。尝试写入时会出现异常。
【解决方案3】:

使用文件 API: https://developers.google.com/appengine/docs/python/googlestorage/overview

添加一些额外的代码,您可以像使用普通 Python 文件 API 一样使用它:

with files.open(writable_file_name, 'a') as f:
  f.write('Hello World!')

虽然此特定链接描述了与 Google Cloud Storage (GCS) 相关的内容,但您可以轻松替换 GCS 特定部分并将 blobstore 用作存储后端。

代码可以在这里找到: http://code.google.com/p/googleappengine/source/browse/trunk/python/google/appengine/api/files/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    相关资源
    最近更新 更多