【问题标题】:problem with storing data in datastore在数据存储中存储数据的问题
【发布时间】:2010-07-13 08:26:40
【问题描述】:

我遇到了文件上传问题。我使用了 Apache Commons servlet file upload 用于上传文件。虽然文件越来越 上传数据并存储在本地服务器上(http:// 127.0.0.1:8888/_ah/admin/datastore) 但它不会去谷歌 App Engine 数据存储区。 我正在做的是加载 将文件作为流并立即解析流并创建 具有数据的数据存储实体。我实际上并没有试图保存 文件。在本地服务器中它可以工作。当我尝试访问时它甚至可以工作 来自另一台机器的本地服务器。但是,当我 使用 Google Pluggin for Eclipse 将其部署到 Appengine。我的解析 代码依赖于 web-inf 目录下的资源文件。 这些资源文件是否有可能没有被上传并且是 有没有办法检查 Appengine 上上传了哪些文件?

【问题讨论】:

    标签: java google-app-engine gwt google-cloud-datastore


    【解决方案1】:

    .war 中的任何内容都会进入 AppEngine。我看不出它的某些部分将如何被选择性地排除。更有可能的是,您的应用程序依赖于潜伏在您 PC 上某处但未包含在该 .war 文件中的内容。

    但是,您的应用程序不应该检查这些资源并在找不到它们时抛出异常吗?如果它默默地失败了,我会认为这是一个设计缺陷。

    大量记录可能会帮助您调试问题。您可以通过 AppEngine 控制台查看程序的日志。我建议更多的错误检查和日志记录。

    要检查的其他内容是没有运行您认为的软件版本。有一种版本控制机制允许您部署不同的并发版本,并且只有一个可以实际访问。您应该记录和/或以其他方式访问的内容之一是应用构建的一些版本信息(甚至可能包括构建时间戳)。

    【讨论】:

    • 感谢您的回复。我确实尝试使用以下内容记录我的应用程序: if (item.isFormField()) { log.warning("Got a form field: " + item.getFieldName()); } else { log.warning("得到一个上传的文件:" + item.getFieldName() + ", name = " + item.getName());国际化;字节[]缓冲区=新字节[8192]; while ((len = stream.read(buffer, 0, buffer.length)) != -1) { log.info(buffer.toString());} 虽然它为第一个日志语句提供了正确的值,但它给出了垃圾值无论我的文件类型如何,都是第二个。你能解释一下吗?
    • 如果“第二个”是指记录buffer.toString(),这是可以理解的。数组的字符串表示是“L”和一些地址。您可能想改用 Arrays.toString(buffer)。
    • 谢谢。现在它显示了文件中数据的一些 ASCII 值。这是否意味着至少我的文件正在上传?如果是,那么为什么数据没有到达 google-datastore?
    • 好吧,如果您不检查 len 那么您甚至无法确定这一点。但可能是的。您为什么不立即尝试访问您插入商店的价值,看看那里有什么?
    • Act 我不想进入文件。我只想上传一个 kml 文件并使用 java api for kml 解组它并将内容存储到数据存储中。 M 直接使用 Kml.unmarshall(InputStream 流)。
    【解决方案2】:

    .war 文件夹中的文件在应用引擎中执行,其他文件上传。您需要验证的是您设置的路径以及源 java 文件和正在读取的文件的路径。您不能在应用引擎中使用本地文件系统路径。您需要在项目中包含该文件

    【讨论】:

      猜你喜欢
      • 2017-01-27
      • 2018-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 2018-09-25
      • 2017-10-15
      • 1970-01-01
      相关资源
      最近更新 更多