2011-01-19 12 views
16

Czy ktoś jeszcze miał problemy z załadowaniem pliku csv do Codeigniter? Dostaję dość denerwujące "Typ pliku, który próbujesz przesłać, jest niedozwolony." błąd, mimo że wyraźnie ustawiłem typ przesyłania. Oto mój kod (powinien być dość standardowy):Wgrywanie CSV do Codeigniter

function doUpload() { 

    $config['upload_path'] = 'uploads/'; 
    $config['allowed_types'] = 'text/plain|text/csv|csv'; 
    $config['max_size'] = '5000'; 
    $config['file_name'] = 'upload' . time(); 

    $this->load->library('upload', $config); 

    if(!$this->upload->do_upload()) echo $this->upload->display_errors(); 
    else { 
     $file_info = $this->upload->data(); 
     $csvfilepath = "uploads/" . $file_info['file_name']; 
     $this->addfromcsv($csvfilepath); 

    } 

} 

Próbowałem objąć wszystkie bazy w dozwolonych typach - może przegapiłem jeden? Dzięki za pomoc!

+3

gdzie ** ** allowed_types powinny być '$ konfiguracji [ 'allowed_types'] = csv;' i w ** konfiguracyjne/mim. php ** należy dodać 'text/plain' w kluczu ** csv **. Tak to zrobiłem. – machineaddict

Odpowiedz

12

Pech nie ma oficjalnej specyfikacji, więc jest całkiem sporo z nich: najbardziej popularne wśród tych, które są brakuje,

text/comma-separated-values|application/csv|application/excel|application/vnd.ms-excel|application/vnd.msexcel|text/anytext 

Jest wysoce nieprawdopodobne, spotkasz jeszcze jedną.

+0

Dzięki, ale w końcu to nie zadziałało. Wydaje się tak głupie, że nie ma sposobu, aby ustawić go, aby zezwolić na wszystkie typy plików. Przynajmniej w fazie rozwoju, nawet jeśli nie chcą pozwolić na to w produkcji. – StormShadow

+0

@StormShadow: Właściwie jest sposób, przez rozszerzenie klasy przesyłania. Oto kod, użyłem go w przeszłości i działa. http://codeigniter.com/forums/viewthread/123663/#757848 BTW, możesz po prostu chcieć sprawdzić konkretny typ mime twojego pliku i dodać go zamiast tego. – cbrandolino

+0

Mogę znaleźć niepoprawnie typ pliku mime? – StormShadow

5

Miałem ten sam problem z przesyłaniem plików .csv. Rozwiązałem go, określając typ mime za pomocą file -I file.csv w Terminalu OS X. Podano, że typ MIME był "text/plain", więc dodałem to do pliku config/mimes.php.

+0

Dziękuję. To działało dla mnie. – Sergio

30

Mam to działa, dodając sugerowane typy MIME cbrandolino do config/mimes.php (świetna wskazówka jljohnstone). Więc własnością CSV moich $ mimów wygląda to teraz:

'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', 'text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel') 
+2

Bardzo pomocny. Zastanawiam się, dlaczego oficjalne CI tego nie uwzględniło. dzięki. – elf1984

+0

Pracował także dla mnie. Istnieje lista typów mime CSV w pliku '/ appication/config/mime.php', ale nie jest tak obszerna, jak ta, którą opublikował Jos. –

+0

Brakowało mi dwóch z listy, po dodaniu ich pracowałem! – Drewdin

3

- CodeIgniter 2.2.0 -

Zrobiłem szybki debug na Załaduj biblioteki i mam okazało się, że czasami ten sam kod źródłowy działający na różnych serwerach identyfikuje ten sam plik CSV, który ma inny typ pliku (np. Serwer 1 identyfikuje plik CSV jako: application/vnd.ms-excel ale serwer identyfikują ten sam plik CSV co: tekst/x-c).

Moja poprawka polegała na dodaniu w pliku aplikacji/config/mimes.php typu pliku zidentyfikowanego przez serwer, na którym wystąpił problem. W związku z tym moja tablica csv z pliku mimes.php wygląda następująco: 'csv' => array('application/vnd.ms-excel', 'text/anytext', 'text/plain', 'text/x-comma-separated-values', 'text/comma-separated-values', 'application/octet-stream', 'application/vnd.ms-excel', 'application/x-csv', 'text/x-csv', 'text/csv', 'application/csv', 'application/excel', 'application/vnd.msexcel', 'text/x-c').

+0

Dziękuję. Dobre rozwiązanie. – Florin

0

Próbowałem wielu rzeczy, aby przesłać plik csv w CodeIgniter: -

i dodać typ MIME (application/vnd.ms-Excel) do pliku typu MIME ale średnia kwestią jest CodeIgniter zaakceptuje tylko nazwę pliku userfile. jeśli ustawisz plik nazwy użytkownika, to działa.

Myślę, że może być inny sposób, ale nie mogę tego znaleźć.

0

pierwszy w dozwolonych typów wpisz csv

$config['allowed_types'] = 'csv'; 
$this->load->library('upload', $config); 

sekund przejść do/config/mimów.php i zmienić element tablicy csv następująco:

'csv' => array(
    'text/x-comma-separated-values', 
    'text/comma-separated-values', 
    'application/octet-stream', 
    'application/vnd.ms-excel', 
    'application/x-csv', 
    'text/x-csv', 
    'text/csv', 
    'application/csv', 
    'application/excel', 
    'application/vnd.msexcel', 
    'text/plain' 
),