【问题标题】:Writing files to the system in my GWT - Google App Engine (GAE) application在我的 GWT - Google App Engine (GAE) 应用程序中将文件写入系统
【发布时间】:2011-10-10 17:40:40
【问题描述】:

我创建了一个 GWT 应用程序,现在想在 GAE 之外部署它。我希望在 GAE 之外部署的原因是 GAE 的Sandbox 安全功能,它不允许我将文件写入我的系统。我将我的数据以本体(.owl 文件)的形式存储在我的“/war/WEB_INF”下,并且我希望最终用户能够通过服务器修改(写入/保存)该文件。

我了解 GAE 不允许我这样做,但是否有付费的 Google 服务(例如 google 应用程序)允许托管允许将文件写入系统的 GWT 应用程序?例如,像 GAE 的附加组件?

如果不是,您会推荐什么解决方案来在 Web 上托管 GWT 应用程序(让我将文件写入 WEB-INF 文件夹)?

编辑:我通过将 GWT 项目部署为 .war 文件并托管在 TomCat 中解决了这个问题。

【问题讨论】:

    标签: google-app-engine gwt file-io hosting


    【解决方案1】:

    我对 GAE 非常陌生,但如果您还没有查看过他们的实验性写入/读取 blobstore 服务,您可以查看 here。我相信他们有一个类似的python API。它当然存储在 GAE blobstore 中,而不是 /war/WEB-INF/ 目录下,但它确实可以解决您正在寻找的问题。

    另外,如果您希望运行自己的服务器(例如可能在 EC2 上),那么您可能需要查看AppScale。但就我个人而言,我不会将其作为解决方案,因为我非常怀疑 AppScale 的性能与谷歌的 GAE 网络服务器一样好,而且缺乏相同程度的支持/开发。

    【讨论】:

    • 我实际上使用 blobstore Java API 将文件存储在数据库中。您可以将基本 servlet 映射到 /fileServlet/* 之类的东西,然后使用路径和文件名调用它,您可以解析这些文件名以识别某个 blob(当然,您之前保存了一些相关的“路径”和“文件名”)和它就像你自己的文件系统一样。
    • 嗯,所以我什至根本不需要将数据(我的本体)存储在 WEB-INF 下?在安全方面,使用 blobstore 会比在我的文件系统下存储本体更不可信吗?
    • 好吧,我不确定这是否允许修改或覆盖文件:“Blob 在创建后无法修改,但可以删除。”此外,我的本体大于 32mb,但显然:“应用程序可以使用 API 调用一次读取 Blobstore 值的一部分。该部分的大小可以达到 API 返回值的最大大小。”跨度>
    • 我认为该语句不适用于实验性 blobstore 读/写 API。该示例显示,您可以在使用以下命令检索同一文件后向其写入更多内容:new AppEngineFile(path)。至于大小限制,我认为您可以分块请求文件。但是您必须处理 GAE 中的一些非常实际的限制。
    • 写入 blobstore 比写入文件系统安全,因为错误不会导致您让用户将任意数据写入您的 FS。它也更具可扩展性,因为它可以在 App Engine 等分布式架构中工作。
    【解决方案2】:

    您是否排除了诸如创建Owl 实体来保存您的本体,并通过使用它作为键名来处理*.owl 请求以查找和提供相应的Owl 的可能性?这是非常简单的代码。

    【讨论】:

    • 您好大卫,非常感谢您的回复。这是我不知道的事情。你能详细说明/提供链接吗?我是网络应用程序的新手。目前,我将本体保存在服务器端(/war/WEB-INF/)。我会将它放在这个框架中的什么位置?
    • 你需要的大部分都在这里:code.google.com/appengine/docs/java/datastore
    • 你好大卫,我已经阅读了这篇文章,但最后说最大允许的“实体”大小是 1 MB,而我的本体是几百 MB。您的意思是,只需将我的本体的 url(在其他地方在线保存)存储为 owl 实体的属性,然后返回该 url 以写入我的本体吗?因为,我认为将我的实际本体存储为数据存储实体是不可能的。
    • 数百个 MB 将是一个挑战。我撤回了数据存储建议。
    【解决方案3】:

    GWT 主要是一种客户端技术。 GAE 是一种服务器端技术。您似乎将 GWT 和 GAE 引擎混为一谈。 GAE 几乎可以与任何客户端技术配合使用,而 GWT 可以连接到许多不同的后端平台。

    您是否尝试将后端代码直接移动到新平台?您是否打算为新平台重写后端,但保留 GWT 代码?您对这个应用程序的目标是什么?供您和几个朋友使用,还是供成千上万的人使用?免费或付费客户?

    如果您想离开 AppEngine,您可以切换到几乎任何您想要的 Java 托管服务 - 从小型共享 VPS 到您自己的 Amazon EC2 迷你云。我不认为谷歌提供通用的 java 托管。我不知道您是如何构建应用程序的后端的,但您可能使用了 servlet,您应该可以在任何地方使用它。

    如果您想继续使用 AppEngine,您应该考虑是否可以将您的 owl 文件分成更小的部分,这些部分可以作为实体存储在数据库中。

    无论您选择哪个平台,如果您计划为多人提供服务,您将需要一些方法来防止一个巨大的 owl 文件成为巨大的瓶颈。

    【讨论】:

    • 您好彼得,非常感谢您的回复。我的申请是一个研究项目,适用于不到 50 人。它纯粹是在 GWT 中,我只是使用 GWT RPC 在客户端和服务器端之间传输可序列化对象。理想情况下,我想使用 GAE,因为通过 Eclipse GWT 插件将应用程序部署到 GAE 非常容易。但是,正如我所说,问题是无法将文件写入我的 WEB-INF 文件夹。我想对我来说最理想的做法是打包我的应用程序 (.war),然后将其托管在 java 托管服务上?
    猜你喜欢
    • 2011-05-09
    • 1970-01-01
    • 2012-11-30
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多