web-dev-qa-db-de.com

CodeIgniter: "Der Dateityp, den Sie hochzuladen versuchen, ist nicht zulässig."

Ich habe ein sehr seltsames Upload-Problem. Hier ist die relevante Ansichtsdatei:

<form action="http://localhost/index.php/temp/upload/" method="post" enctype="multipart/form-data">
    <fieldset>
        <input type="file" name="userfile"/>
        <input type="submit" value="Upload"/>
    </fieldset>
</form>

Und hier ist die upload()-Methode meines temp-Controllers:

public function upload()
{
    $config['upload_path']   = FCPATH . 'uploads' . DIRECTORY_SEPARATOR;
    assert(file_exists($config['upload_path']) === TRUE);
    $config['allowed_types'] = 'avi|mpg|mpeg|wmv|jpg';
    $config['max_size']      = '0';

    $this->load->library('upload', $config);
    if ($this->upload->do_upload('userfile') === FALSE)
    {
        // Some error occured
        var_dump($this->upload->display_errors('', ''));
        var_dump($_FILES);
    }
    else
    {
        // Upload successful
        var_dump($this->upload->data());
    }
}

Wenn ich ein AVI-Video hochlade, funktioniert alles gut. Wenn ich beispielsweise ein WMV-Video hochlade, bekomme ich folgende Var-Dumps:

string 'The filetype you are attempting to upload is not allowed.' (length=57)

array
  'userfile' => 
    array
      'name' => string 'wmv.wmv' (length=7)
      'type' => string 'video/x-ms-wmv' (length=14)
      'tmp_name' => string 'C:\wamp\tmp\php2333.tmp' (length=23)
      'error' => int 0
      'size' => int 83914

Die Erweiterung "wmv" wird als MIME-Typ interpretiert: video/x-ms-wmv. Dies sollte in Ordnung sein, da meine config/mimes.php folgendes hat:

'wmv' =>  array('video/x-ms-wmv', 'audio/x-ms-wmv')

Ähnlich verhält es sich, wenn ich versuche, andere Dateien hochzuladen. Bisher scheint das einzige, was funktioniert, mein Test-AVI-Video.

Irgendwelche Ideen, was könnte falsch sein?

UPDATE 1:

Eines meiner Rechner, nur AVI-Uploads. Auf dem Computer eines anderen Entwicklers werden keine Dateien hochgeladen. Auf einem anderen Entwicklercomputer werden alle unterstützten Dateien hochgeladen. Sind diese Browser- oder Serverprobleme?

24

Sie benutzen Firefox, oder?

Sie könnten versuchen, sich system/libraries/Upload.php Zeile 199 anzusehen:

$this->_file_mime_type($_FILES[$field]);

Ändern Sie diese Zeile in:

$this->_file_mime_type($_FILES[$field]); var_dump($this->file_type); die();

Laden Sie dann Ihre .wmv-Datei hoch. Es würde etwas wie application/octet-stream oder was auch immer zeigen. Fügen Sie das Ihrem mimes.php hinzu. Hoffe diese Hilfe =)

Ähnliche Antwort hier

Einige Links:

48
Rocco

$ config ["Allowed_types"] = "*";

5
Kanchi
  1. Laden Sie Ihre WMV-Datei mit FTP/SFTP/scp/etc auf den Server hoch, wo Sie die CodeIgniter-Anwendung ausführen
  2. Führen Sie auf dem Server, auf den Sie die .wmv-Datei hochgeladen haben, den folgenden PHP -Code aus

    <?php
    $file_path = 'CHANGE_THIS_TO_ABSOLUTE_FILE_PATH_THAT_YOU_HAVE_UPLOADED.wmv';
    $finfo = finfo_open(FILEINFO_MIME);
    $mime = finfo_file($finfo, $file_path);
    var_dump($mime);
    ?>
    
  3. Speichern Sie den Code als mime.php

  4. Führen Sie im Terminal $ php mime.php aus
  5. Wenn ein anderer Wert erstellt wird, als für wmv bereits vorhanden ist, hängen Sie diesen Wert an die wmv-Mime-Typen an.

Überprüfen Sie PHP_VERSION auch in anderen Entwicklungsmaschinen. finfo_open wurde in PHP 5.3 eingeführt. Der Entwicklungscomputer, auf dem Upload ausgeführt wird, verfügt möglicherweise über eine ältere Version von PHP oder den richtigen Mime-Typ für den WMV.

4
P M

haben Sie versucht, Mime-Typen anstelle von Erweiterungen in $ config ['Allowed_types'] zu verwenden? 

schreib es so 

$config["allowed_types"] = "video/x-msvideo|image/jpeg|video/mpeg|video/x-ms-wmv";
2
Taha Paksu

Überprüfen Sie Ihre mimes.php-Datei in application/config. Es sollte ein Array von Mime-Typen zurückgeben, beispielsweise return $mimes; am Ende der Datei oder return array(..... am Anfang des Mimes-Arrays.

1

Ich hatte kürzlich einige sehr ähnliche Probleme mit der Upload-Klasse von Codeigniter.

Die * allowed_types * scheinen nicht zu funktionieren. Ich wollte zum Beispiel das Hochladen von .PNG-Bildern zulassen, dies würde sie jedoch nicht durch den Filter passieren lassen. Ich habe es weiter untersucht. Ich habe alle Dateitypen vorübergehend hochgeladen, ich habe ein .PNG hochgeladen und dann die Upload-Daten gespeichert ( $ this-> upload-> data ()); ). Aus irgendeinem Grund dachte er, der MIME-Typ sei text/plain ! Dies könnte mit Ihrem Problem zusammenhängen.

Es gibt einige Lösungen dafür, die ich beim Surfen in einigen Foren gefunden habe, in denen Sie die Klasse oder den Kern ändern oder erweitern können, aber sie funktionierten nicht für mich - sorry. Ich glaube, es ist ein Codeigniter-Core-Fehler (ich glaube, das Problem wurde bereits mit EllisLabs geöffnet). Ich habe das verdammte Ding sowieso hartcodiert! Nun, ich hoffe das hilft dir einiges.

Grundlegendes Beispiel/Problemumgehung

//replace with your allowed MIME types
if ($_FILES['name_of_form_upload']['type'] != 'image/jpeg' && $_FILES['name_of_form_upload']['type'] != 'image/png' && $_FILES['name_of_form_upload']['type'] != 'image/gif') {
    $data['message'] = '<div class="message">That file type is not allowed!</div>';
    $this->load->view('home_view', $data);
} else {
    //run upload code
}

Bearbeiten: Formatierung/Grammatik

1
envysea

Beantworten Sie das Hochladen der .doc-Datei in CodeIgniter

Ändere das

'doc'   =>  'application/msword',

Mit dieser Online-Nr. 95 (application/config/mimes.php-Datei)

'doc'   =>  array('application/vnd.ms-Word','application/msword'),
1
Anil

wenn Sie den einfachen Weg benötigen, um dieses Problem zu lösen, gibt es eine einfache Lösung dafür. Öffnen Sie die Datei "system/libraries/Upload.php" 

line no 465
you will see 
if ( ! $this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype', 'debug');
            return FALSE;
        }


just make it true

    if ( ! $this->is_allowed_filetype())
            {
                $this->set_error('upload_invalid_filetype', 'debug');
                return TRUE;
            }

note : it will stop your all file type validation.
0
Abhishek

Dies ist eigentlich ein Fehler im Kern. Ich habe ein Upgrade auf die neueste Version von CI durchgeführt und der Fehler ist verschwunden.

0
thedjaney

Ändern Sie die IN-Anwendung\config\Mimes.php

0
Anand