我正在尝试使用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上一切正常。我已经验证在本地开发环境中没有输入任何内容(通过开发管理控制台)。我正在上传一张~1Kb的CSV,但尝试了其他文件类型/大小也没有成功(相同的文件适用于GAE prod)。
答案 0 :(得分:5)
当调用生成html的页面(使用servlet,jsp等)并调用blobstoreService.createUploadUrl("/upload");
时,您无法多次重复使用此页面。
在浏览器中每次重新加载此页面
。答案 1 :(得分:3)
问题是由运行dev app服务器时在类路径中包含存根和测试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或类路径中。
答案 2 :(得分:2)
$ mvn clean gae:run -DskipTest
适合我
答案 3 :(得分:0)
我没有使用Maven,只使用Eclipse和GAE插件。我在类路径中也没有看到任何 test .jar文件。我刚刚删除了Eclipse中的Run Configuration并重新启动它并且工作正常。不知道出了什么问题,但这解决了我在dev / local模式下运行时的问题。
答案 4 :(得分:0)
如果不使用maven而使用带插件的Eclipse:
删除RUN / DEBUG配置。要创建新的,只需右键单击项目并选择运行/调试As&gt;网络应用程序