Pergunta

Eu estou tentando emular o código de upload de arquivos do site da grails, e eu estou correndo em alguns problemas. Estou usando o mesmo código que encontrou aqui . Aqui está o meu código:

    <g:form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile" />
        <input type="submit" value="Upload" />
    </g:form>

e

def upload = {
    def f = request.getFile('myFile')
    if(!f.empty) {
      flash.message = 'success'
    }    
    else {
       flash.message = 'file cannot be empty'
    }
}

Estou recebendo o seguinte erro em tempo de execução:

Message: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}
Caused by: groovy.lang.MissingMethodException: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}

Ele parece estar relacionada a alguma configuração do Spring. O Primavera não parecem estar injetando MultipartHttpServletRequest, assim que meu pedido não tem o método apropriado. Acabei de criar este aplicações usando grails create-app. Eu não modificou o arquivo resources.groovy. Estou usando grails 1.0.3.

Qualquer ajuda é muito apreciada. O site grails faz este olhar tão fácil.

Foi útil?

Solução

Problema resolvido!

Eu estava usando o código de exemplo para upload de arquivos para Grails diferente do que o autor original provavelmente pretendia. O problema é que quando o Enviar método do controlador foi chamado, era, por vezes, para o original rendem de página Upload. O pedido nesse método era não era do tipo MultipartHttpServletRequest. Quando eu fiz um post com o meu arquivo para upload, em seguida, Primavera fez a coisa correta e mudou a minha requestion para MultipartHttpServletRequest. Então, eu precisava fazer uma verificação simples no meu Atualização método de controlador antes de usar o meu pedido como um MultipartHttpServletRequest.

if(request instanceof MultipartHttpServletRequest)
{
  MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;  
  CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myFile");
  if(!f.empty)
    flash.message = 'success'
  else
   flash.message = 'file cannot be empty'
}   
else
  flash.message = 'request is not of type MultipartHttpServletRequest'

Outras dicas

Agora, com os Grails 2.x uso:

<g:uploadForm name="upload" action="upload" method="POST">
     <input type="file" name="file" />
</g:uploadForm>

def upload = {
    def file = request.getFile('file')
    assert file instanceof CommonsMultipartFile

    if(!file.empty){ //do something }
    else { //do something }
}

Mais limpo, mais simples.

certifique-se de atualizar o html (o gsp com a forma de fazer upload de) para ter o enctype , pois mostram:

<g:form action="upload" method="post" enctype="multipart/form-data">

A esperança que é útil, parece muito óbvio, mas é meu primeiro pensamento depois de ver sua mensagem de erro.

aqui parece estar a ter os mesmos problemas que você teve. Ele diz que "fixo"-lo:

resolvido. Foi o meu erro, eu estava indo em ação salvar antes de enviar o formulário, então eu suponho que não havia nenhum arquivo.

Não sabe como tomar o que ele disse, mas talvez ele vai ajudá-lo.

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