Frage

Ich versuche, den Datei-Upload-Code von der Grails Website zu emulieren, und ich bin in einige Probleme laufen. Ich verwende den gleichen Code wie gefunden hier . Hier ist mein Code:

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

und

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

ich die folgende Fehlermeldung zur Laufzeit empfangen:

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

Es scheint zu einem gewissen Spring-Konfiguration zusammenhängen. Frühling erscheint nicht MultipartHttpServletRequest zu injizieren, so dass meine Anfrage nicht über die geeignete Methode. Ich habe gerade diese Anwendungen mit grails create-app. Ich habe nicht die resources.groovy Datei geändert. Ich bin mit Grails 1.0.3.

Jede Hilfe ist sehr geschätzt. Die grails Website macht dies so einfach aussehen.

War es hilfreich?

Lösung

Problem gelöst!

Ich war mit dem Beispiel-Code für Dateien auf Grails anders als der ursprüngliche Autor wahrscheinlich gedacht hochladen. Das Problem ist, dass, wenn die Hochladen Methode des Controllers genannt wurde, ist es manchmal für das Original war übertragen von der Upload-Seite. Die Anfrage bei diesem Verfahren war, war nicht vom Typ MultipartHttpServletRequest. Wenn ich eine POST mit meiner Datei tat hochladen, dann tat Frühling die richtige Sache und änderte meine requestion zu MultipartHttpServletRequest. Also, ich brauchte eine einfache Prüfung in meinem update Controller-Methode zu tun, bevor meine Anfrage wie ein MultipartHttpServletRequest verwendet wird.

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'

Andere Tipps

Jetzt mit der Grails 2.x Verwendung:

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

Mehr sauber, einfacher.

sicherstellen, dass Sie die HTML (Ihre gsp mit dem Formular aus hochladen) aktualisieren Sie die enctype haben, da sie zeigen:

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

Hope, die hilfreich ist, scheint zu offensichtlich, aber es ist mein erster Gedanke nach der Fehlermeldung zu sehen.

hier scheint die gleichen Probleme zu haben Sie hatten. Er sagt, er „fest“ es:

  

Gelöst. Es war mein Fehler, ich war in Aktion gehen speichern, bevor Sie das Formular abschicken, so dass ich nehme an, es war keine Datei.

Nicht sicher, wie zu nehmen, was er sagte, aber vielleicht wird es Ihnen helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top