【问题标题】:How to handle uploading html content to an AppEngine application?如何处理将 html 内容上传到 AppEngine 应用程序?
【发布时间】:2012-01-20 02:35:33
【问题描述】:

我想允许我的用户将 HTML 内容上传到我的 AppEngine 网络应用程序。但是,如果我使用 Blobstore 上传所有文件(HTML 文件、css 文件、图像等),这会导致问题,因为指向其他文件(页面、资源)的所有链接都将不起作用。

我看到了两种可能性,但它们都不是很漂亮,我想避免使用它们:

  • 查看 html 文件中的所有链接并将它们更改为相关的 blob 键。

  • 保存文件和 blob 键之间的映射,捕获所有重定向并提供 blob(可能会导致同名文件出现问题)。

我怎样才能优雅地解决这个问题,而不必检查和更改用户的文件?

【问题讨论】:

  • 我认为没有更优雅的解决方案了。由于 html 需要包含其资源(css/图像等)的正确路径。你能解释一下用户案例是什么吗?想要一个用户能做什么?在我的头顶上,我会围绕它创建一个 html 框架,并让用户在一个单独的文本区域中指定 css/js,并将其作为文本存储在数据存储中。并利用 blobstore 存储图像。
  • @fredrik 我的网站将成为一种内容门户,我的用户将上传交互式 HTML 内容,例如游戏。我不想在我的用户构建内容时对他们强制执行任何规则,而且我不想在他们上传内容后弄乱他们的内容......

标签: html google-app-engine file-upload blobstore


【解决方案1】:

保存映射是这里的最佳选择。您需要以某种方式识别一组文件,因为多个用户可能会上传同名文件,然后将唯一的路径名与该组中的每个文件相关联。您可以使用键名使其成为一个简单的数据存储获取方式,以查找与给定路径关联的 blob。不需要重定向 - 只需使用标准的 Blobstore 服务方法设置 blobstore 标头以让 App Engine 将 blob 提供给用户。

正如 Frederik 建议的那样,另一种选择是上传 zip。不过,无需单独解压和存储文件 - 您可以像 this demo app 那样直接从 blobstore 中的 zip 文件中提供它们。

【讨论】:

    【解决方案2】:

    由于应用引擎在多个服务器上运行您的内容,您无法写入文件系统。你可以做的是让他们上传一个包含他们的 html、css、js、图像等的 zip 文件...... python 的 zipfile 模块在 appengine 中可用,所以你可以解压缩这些文件,并单独存储它们。这样,您就知道了 zip 的目录结构。这允许您创建到 blobstore 中内容的相对路径的映射。我没有足够的 zipfile 经验在这里写一个完整的例子,我希望有经验的人可以编辑我的答案,或者创建一个新的例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多