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
Formular-Tag sollte enctype="multipart/form-data"
enthalten.
dh,
<form action='' method=''enctype="multipart/form-data>
<input type='file' name='field_name'/>
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
Wenn Sie ein Null-Array erhalten, stellen Sie sicher, dass der clientseitige Code korrekt ist.
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()
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%Tags und Links php file-upload codeigniter