2011-01-19 46 views
16

有沒有其他人在將csv文件上傳到Codeigniter時遇到問題?我遇到了一個非常惱人的問題:「您正在嘗試上傳的文件類型是不允許的。」錯誤,即使我已經非常明確地設置了上傳類型。這裏是我的代碼(應該是相當標準的東西):將csv上傳到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); 

    } 

} 

我試圖掩蓋在我的允許的類型所有的基礎 - 也許我錯過了一個? 感謝您的幫助!

+3

的** ** allowed_types應該是'$配置[ 'allowed_types'] = 'CSV';`和**配置/默劇。 PHP **你應該在** csv **鍵中追加`text/plain`。這是我做到的。 – machineaddict 2013-04-02 11:32:45

回答

12

不幸的是沒有官方規範,所以有相當多的人:那些缺失是最流行的,

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

這是極不可能,你會遇到一個又一個。

+0

謝謝,但它畢竟沒有成功。似乎很愚蠢,沒有辦法將其設置爲允許所有文件類型。至少在開發過程中,即使他們不想讓它在生產中。 – StormShadow 2011-01-19 07:37:18

+0

@StormShadow:實際上有一種方法,通過擴展上傳類。這是我過去使用過的代碼,可以工作。 http://codeigniter.com/forums/viewthread/123663/#757848順便說一句,您可能只想查看您的文件的特定MIME類型並添加該文件。 – cbrandolino 2011-01-19 07:47:01

+0

我可以非編程方式找到文件的MIME類型? – StormShadow 2011-01-20 04:44:03

5

我有同樣的問題上傳.csv文件。我通過在OS X Terminal中使用file -I file.csv來確定MIME類型來解決這個問題。它報告說mime類型是'text/plain',所以我將它添加到config/mimes.php文件中。

30

我通過將cbrandolino的建議mimetypes添加到config/mimes.php(偉大的提示jljohnstone)得到了它的工作。所以,我的$默劇的CSV屬性現在看起來是這樣的:

'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') 
3

- 笨2.2.0 -

我做了快速調試的上傳,我有發現有時運行在不同服務器上的相同源代碼將識別具有不同文件類型的相同CSV文件(即,服務器1將CSV文件識別爲:application/vnd.ms-excel但是服務器2識別與以下文件相同的CSV文件:text/x-c)

我的修補程序是在application/config/mimes.php中添加由服務器標識的文件類型,問題在哪裏。因此,我的csv數組從mimes.php文件看起來像: '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

我試過很多東西上傳CSV文件笨: -

我添加MIME類型(應用程序/ vnd.ms - Excel中)爲MIME類型的文件,但平均的問題是笨將只接受文件名userfile。如果你將設置文件名userfile然後它的作品。

我想有可能是另一種方式,但我無法找到。

0

首先在允許的類型只需鍵入 'CSV'

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

第二去/配置/啞劇。PHP 和更改 'CSV' 數組元素如下:

'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' 
),