3

我正在尝试使用 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 产品)。

4

5 回答 5

5

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

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

于 2011-05-20T10:59:53.783 回答
3

该问题是由于运行开发应用程序服务器时在类路径中包含存根和测试 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 或类路径中。

于 2010-09-27T15:31:41.077 回答
2
$ mvn clean gae:run -DskipTest 

为我工作

于 2012-06-19T23:30:14.930 回答
0

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

于 2011-10-17T01:02:58.347 回答
0

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

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

于 2012-04-14T10:05:42.750 回答