Question

J'essaie d'imiter le code de téléchargement de fichier à partir du site Web Grails et j'ai quelques problèmes. J'utilise le même code que celui que l'on trouve ici . Voici mon code:

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

et

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

Je reçois l'erreur suivante au moment de l'exécution:

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

Cela semble être lié à une configuration Spring. Spring ne semble pas injecter MultipartHttpServletRequest . Par conséquent, ma demande n'a pas la méthode appropriée. Je viens de créer cette application avec grails create-app . Je n'ai pas modifié le fichier resources.groovy. J'utilise grails 1.0.3.

Toute aide est très appréciée. Le site Web Grails rend ce look si facile.

Était-ce utile?

La solution

Problème résolu!

J'utilisais l'exemple de code pour télécharger des fichiers sur Grails différemment de l'auteur original probablement prévu. Le problème est que lorsque la méthode upload du contrôleur a été appelée, c'était parfois pour le rendu d'origine de la page Upload. La demande dans cette méthode n'était pas de type MultipartHttpServletRequest. Lorsque j'ai effectué un POST avec le téléchargement de mon fichier, Spring a ensuite procédé correctement et modifié mon requestion en MultipartHttpServletRequest. Je devais donc effectuer une vérification simple dans ma méthode de contrôleur update avant d’utiliser ma requête comme un 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'

Autres conseils

Maintenant, avec l’utilisation de Grails 2.x:

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

Plus propre, plus simple.

assurez-vous de mettre à jour le code HTML (votre gsp avec le formulaire à partir duquel vous souhaitez effectuer un transfert) pour que le enctype soit tel qu'il s'affiche:

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

J'espère que cela est utile, que cela semble trop évident, mais c'est ma première pensée après avoir vu votre message d'erreur.

Quelqu'un ici semble avoir les mêmes problèmes que vous. Il dit qu'il a "fixé" ça:

  

Résolu. C’était mon erreur, j’allais au travail sauver avant de soumettre le formulaire, donc je suppose qu’il n’y avait pas de fichier.

Vous ne savez pas comment prendre ce qu'il a dit, mais peut-être que ça vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top