"hat keine Datei zum Hochladen ausgewählt" beim Hochladen mit Codeigniter

7

Ich versuche, ein Bild hochzuladen, aber es gibt mir immer "Sie haben keine Datei zum Hochladen ausgewählt."

Mein Controller

%Vor%

alle Dateianforderungen und die Dateiberechtigungen sind gesetzt, aber ich bekomme immer noch den gleichen Fehler. kann mir bitte jemand sagen was ich falsch mache

    
LiveEn 17.09.2011, 19:10
quelle

5 Antworten

22

Parameter zu $this->upload->do_upload() function sollte der Name des Formularfelds sein. (Wenn Sie es ohne Parameter aufrufen, wird userfile verwendet). In deinem Fall sollte es "Bild" sein. Statt:

%Vor%

sollte es sein:

%Vor%     
cenanozen 17.09.2011, 19:58
quelle
6
  • Seite anzeigen

Formular-Tag sollte enctype="multipart/form-data" enthalten.
dh,     <form action='' method=''enctype="multipart/form-data> <input type='file' name='field_name'/>

  • Controller

und im Controller-Uploadcode sollte $this->upload->do_upload("field_name") sein
und jsut prüfen, ob Datei in Server-Seite erreicht, indem Sie einfach wie

drucken %Vor%

Wenn Sie ein Null-Array erhalten, stellen Sie sicher, dass der clientseitige Code korrekt ist.

    
shihabudheen 15.08.2012 07:17
quelle
1

Ich stimme dem Ratschlag vollständig zu, sicherzustellen, dass der Name des Dateielements im Formular entweder userfile ist oder, falls unterschiedlich, an die Methode do_upload übergeben wird. Für zukünftige Referenz ist es jedoch auch wichtig, diese Zeile zu beachten:

%Vor%

kommt vor

%Vor%

Ich fand, dass die Methode post der Klasse input erst dann zurückgibt, wenn die Methode do_upload aufgerufen wurde. Außerdem haben Sie es bereits in der if -Anweisung aufgerufen, so dass Sie es nicht erneut in der else -Klausel aufrufen müssen. Nach dem Aufruf von do_upload haben Sie nun Zugriff auf Formularelemente mit $this->input->post und Informationen über die hochgeladene Datei mit $this->upload->data()

    
DavidHyogo 26.01.2012 14:56
quelle
1

stelle sicher, dass du

benutzt
  

form_open_multipart ()

wenn Sie den Formularhelfer verwenden.

    
etlds 27.06.2013 22:27
quelle
0

Dies ist nur allzu bekannt ein Problem.

Ich werde meine Antwort als ausführlichere Erklärung zu einer anderen Antwort hinzufügen, die ich hier gefunden habe. Der Code, den ich einreiche, ist kein anderer Code, sondern fügt einige Zeilen und Besonderheiten hinzu, die in seiner Antwort nicht erwähnt werden.

Obwohl es so aussieht, als ob seine Antwort technisch korrekt ist und vielleicht die Antworten über ihm auch auf ihre eigene Art korrekt sind, haben sie für mich nicht funktioniert. Ich musste dieses Problem untersuchen, um herauszufinden, was wirklich vor sich geht, und ich habe genug über den Prozess gelernt, um zu verstehen, wie ich meine eigene Lösung schreiben kann.

Beziehen Sie sich zuerst auf den Kommentar von Nana Partykar: "In Ihrem Controller kann ich keine is_uploaded_file () Funktion sehen?" Dieser Kommentar sagt uns, dass Leute die zwei Dateien missverstehen, die ähnliche Namen haben, aber unterschiedlich sind. Ich weiß, weil ich für eine Weile dachte, sie müssen auf die gleiche Datei verweisen, die Controller-Datei ("Uploader.php" genannt). Ich kann sehen, fast alle diese Fragen beziehen sich auf das gleiche "How to upload mehrere Dateien mit Ajax" Tutorial irgendwo da draußen, meine eigene Version, enthalten. Der Code, den wir alle benutzen, ist genau derselbe.

Aber die Controller-Datei ist "Uploader.php". Wo Sie $ this- & gt; upload- & gt; do_upload () oder $ this- & gt; upload- & gt; do_upload ('userfile') oder sogar $ this- & gt; upload- & gt; do_upload ('dateien') sehen, dies bezieht sich auf eine System- / Bibliotheksmoduldatei namens "Upload.php". Beachten Sie, dass Sie vor Aufruf der Funktion do_upload () diese Zeile aufrufen müssen: $ this- & gt; load- & gt; library ('upload', $ config);

Sachin Marwha gab uns eine for-Schleife, die das Array $ _FILES ['userfile'] durchläuft. Nehmen wir an, Sie laden drei Bilder hoch. Jedes Element $ _FILES ['userfile'] besteht selbst aus 5 "Eigenschaften": name, type, tmp_name, error, size. Sie können diese $ _FILE-Eigenschaften auf PHP sehen.

Sie möchten nur jeweils eine Datei an do_upload () übergeben. Sie möchten nicht alle drei (oder sogar 20) Dateien gleichzeitig an dou_upload übergeben. Das bedeutet, dass Sie das Array $ _FILES ['userfile'] in einzelne Dateien unterteilen müssen, bevor Sie do_upload () aufrufen. Um dies zu tun, mache ich ein $ _FILES ['f'] Element des $ _FILES-Arrays. Ich habe das herausgefunden, indem ich Breakpoints in der Datei system / library / Upload.php in der Funktion do_upload ($ file = 'userfile') gesetzt habe, um zu sehen, wo ich die berüchtigte "Datei zum Hochladen" nicht ausgewählt habe (einschließlich mich) beschwert sich über. Diese Funktion, die Sie finden werden, verwendet das ursprüngliche $ _FILES-Array, das Ihr Formular an Ihren Controller sendet. Aber es verwendet wirklich nur den Namen der Eingabe Typ = Datei von Ihrem Formular. Wenn Sie den Namen der Formulareingabe nicht angeben, wird standardmäßig $ _FILES ['Benutzerdatei'] verwendet. Wie sich herausstellte, war das mein größtes Problem, denn wenn ich den Namen meines Eingabefeldes verwende, übergibt dieses Feld ein Array oder eine Sammlung von Dateien, nicht nur eine einzelne Datei. Also musste ich ein spezielles $ _FILES ['f] -Element machen und NUR $ _FILES [' f '] übergeben.

Hier ist die Art, wie ich es mache, und glauben Sie mir, ich habe alle Versionen auf dieser Seite und andere, nicht nur einen StackOverflow, sondern auch andere Tutorials ausprobiert:

%Vor%

Wo es das $ config-Array in der for i-Schleife aufhebt und dann das $ config-Array neu erstellt, erstellt es die Thumbnail-Bilder für jede Bilddatei.

Die vollständige Controller-Upload-Funktion:

%Vor%     
TARKUS 10.02.2017 18:22
quelle

Tags und Links