GAE java.lang.IllegalStateException:必须首先调用 set*BlobStorage() 之一

发布于 2024-09-12 22:31:45 字数 1276 浏览 6 评论 0原文

我正在尝试使用 Blobstore API 在 GAE 中上传文件。在本地运行 GAE 服务器(开发模式)时出现以下异常:

WARNING: /_ah/upload/ag10cmlwc2NoZWR1bGVychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YFQw
java.lang.IllegalStateException: Must call one of set*BlobStorage() first.
 at com.google.appengine.api.blobstore.dev.BlobStorageFactory.getBlobStorage(BlobStorageFactory.java:24)
 at com.google.appengine.api.blobstore.dev.UploadBlobServlet.init(UploadBlobServlet.java:88)
 at javax.servlet.GenericServlet.init(GenericServlet.java:215)
 at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
 at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
 at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)

我正在运行 GAE 1.3.5,但已尝试自 GAE 1.3.0(带有 Blobstore 的第一个版本)以来的所有版本。我正在使用 GAE maven 插件: http://code.google.com/p /maven-gae-plugin/

我的表单是用 GWT 2.0.4 编写的。目前,表单只是一个带有提交的文件输入字段。

提交表单后,我收到上述异常。我能够从 Blobstore 服务成功检索上传 URL。

在 GAE 上一切正常。我已验证本地开发环境中的 blobstore 中没有输入任何内容(通过开发管理控制台)。我正在上传一个约 1Kb 的 CSV,但也尝试了其他文件类型/大小,但没有成功(相同的文件适用于 GAE 产品)。

I am trying to upload a file in GAE using the Blobstore API. I am getting the following exception when running the GAE server locally (dev mode):

WARNING: /_ah/upload/ag10cmlwc2NoZWR1bGVychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YFQw
java.lang.IllegalStateException: Must call one of set*BlobStorage() first.
 at com.google.appengine.api.blobstore.dev.BlobStorageFactory.getBlobStorage(BlobStorageFactory.java:24)
 at com.google.appengine.api.blobstore.dev.UploadBlobServlet.init(UploadBlobServlet.java:88)
 at javax.servlet.GenericServlet.init(GenericServlet.java:215)
 at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
 at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
 at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
 at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)

I am running GAE 1.3.5 but have tried all versions since GAE 1.3.0 (first version with the Blobstore). I am using the GAE maven plugin: http://code.google.com/p/maven-gae-plugin/

My form is written in GWT 2.0.4. Currently, the form is just a file input field with a submit.

I receive the above exception after submitting the form. I am able to successfully retrieve an upload URL from the Blobstore Service.

Everything works fine on GAE. I have verified that nothing is entered into the blobstore in my local dev env (via the dev admin console). I am uploading a CSV that is ~1Kb but have tried other file types/sizes as well without success (same files work on GAE prod).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

〆凄凉。 2024-09-19 22:31:45

当调用生成 html 的页面(使用 servlet、jsp 等)并调用 blobstoreService.createUploadUrl("/upload"); 时,您无法多次重复使用此页面。

每次您想要上传文件时,请在浏览器中重新加载此页面。

When call your page that generates html (using servlet, jsp, etc.) and calls blobstoreService.createUploadUrl("/upload"); you can't re-use this page multiple times.

Reload this page in a browser every time you want to upload the file.

善良天后 2024-09-19 22:31:45

该问题是由于运行开发应用服务器时类路径中包含存根和测试 jar 引起的。如果您使用 maven,只需更改依赖项的范围:

<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>${gae.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-testing</artifactId>
    <version>${gae.version}</version>
    <scope>test</scope>
</dependency>

如果您不使用 maven,请确保这些 jar 不在您的 WEB-INF/lib 或类路径中。

The issue was caused by having the stubs and testing jars included on the classpath when running the dev app server. If you are using maven, simply change the scope of the dependency:

<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-api-stubs</artifactId>
    <version>${gae.version}</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.google.appengine</groupId>
    <artifactId>appengine-testing</artifactId>
    <version>${gae.version}</version>
    <scope>test</scope>
</dependency>

If you are not using maven, make sure these jars are not in your WEB-INF/lib or classpath.

姜生凉生 2024-09-19 22:31:45
$ mvn clean gae:run -DskipTest 

为我工作

$ mvn clean gae:run -DskipTest 

works for me

酒浓于脸红 2024-09-19 22:31:45

我没有使用 Maven,只使用 Eclipse 和 GAE 插件。我在类路径中也没有看到任何 test.jar 文件。我刚刚删除了 Eclipse 中的运行配置并重新启动,它就工作了。不知道出了什么问题,但这解决了我在开发/本地模式下运行时的问题。

I am not using Maven, just Eclipse and the GAE plugins. I also didn't see any test.jar files in my classpath. I just deleted the Run Configuration in Eclipse and restarted and it worked. No idea what went wrong, but this fixed the issue for me while running in dev/local mode.

可可 2024-09-19 22:31:45

如果不使用 Maven,而是使用带插件的 Eclipse:

删除运行/调试配置。要创建新项目,只需右键单击项目并选择运行/调试为>网页应用程序

If not using maven but Eclipse with plugin:

REMOVE RUN/DEBUG CONFIGURATION. To create new, simply right click on project and select run/debug As > Web Application

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文