Pergunta

Estou tentando fazer upload de um arquivo no GAE usando a API Blobstore. Estou obtendo a seguinte exceção ao executar o servidor GAE localmente (modo dev):

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)

Estou executando o GAE 1.3.5, mas tentei todas as versões desde o GAE 1.3.0 (primeira versão com a Blobstore). Estou usando o plugin GAE Maven: http://code.google.com/p/maven-gae-plugin/

Meu formulário está escrito no GWT 2.0.4. Atualmente, o formulário é apenas um campo de entrada de arquivo com um envio.

Recebo a exceção acima depois de enviar o formulário. Consigo recuperar com sucesso um URL de upload do serviço Blobstore.

Tudo funciona bem no GAE. Verifiquei que nada é inserido na Blobstore no meu Dev Env local (através do console do dev admin). Estou carregando um CSV que é ~ 1KB, mas já experimentei outros tipos/tamanhos de arquivo sem sucesso (os mesmos arquivos funcionam no GAE Prod).

Foi útil?

Solução 2

O problema foi causado por ter os stubs e os frascos de teste incluídos no caminho de classe ao executar o servidor de app dev. Se você estiver usando o maven, basta alterar o escopo da dependência:

<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>

Se você não estiver usando o MAVEN, verifique se esses frascos não estão no seu Web-Inf/Lib ou ClassPath.

Outras dicas

Quando ligue para sua página que gera html (usando servlet, jsp, etc.) e chamadas blobstoreService.createUploadUrl("/upload"); Você não pode reutilizar esta página várias vezes.

Recarregue esta página em um navegador toda vez você deseja fazer upload do arquivo.

$ mvn clean gae:run -DskipTest 

funciona para mim

Não estou usando o Maven, apenas o Eclipse e os plugins GAE. Eu também não vi nenhum teste.jar arquivos no meu caminho de classe. Acabei de excluir a configuração de execução no Eclipse e reiniciei e funcionou. Não faço ideia do que deu errado, mas isso corrigiu o problema para mim enquanto executa no modo dev/local.

Se não estiver usando maven, mas eclipse com plug -in:

Remova a configuração de execução/depuração. Para criar um novo, basta clicar com o botão direito do mouse no projeto e selecione Run/Debug como> Aplicativo da Web

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top