将csv上传到Codeigniter

时间:2011-01-19 02:00:17

标签: codeigniter upload mime-types

有没有其他人在将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);

    }

}

我试图涵盖我允许的类型中的所有基础 - 也许我错过了一个? 感谢您的帮助!

6 个答案:

答案 0 :(得分:30)

我通过将cbrandolino建议的mimetypes添加到config / mimes.php(很棒的提示jljohnstone)来实现它。所以我的$ mimes的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')

答案 1 :(得分:12)

不幸的是没有官方规范,所以它们中有很多:最缺少的是那些,

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

你不太可能遇见另一个。

答案 2 :(得分:5)

我在上传.csv文件时遇到了同样的问题。我通过在OS X终端中使用file -I file.csv确定mime类型来解决它。它报告mime类型是'text / plain'所以我将它添加到config / mimes.php文件。

答案 3 :(得分:3)

- Codeigniter 2.2.0 -

我对 上传进行了快速调试,我发现有时在不同服务器上运行的相同源代码会识别出具有不同文件的同一CSV文件type(即 Server 1 将CSV文件标识为: application / vnd.ms-excel ,但 Server 2 标识相同的CSV文件:<强>文本/ XC)

我的修复是在 application / config / mimes.php 中添加由服务器标识的文件类型。因此, mimes.php 文件中的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', 'text/x-c')

答案 4 :(得分:0)

我在codeigniter上尝试了很多东西来上传csv文件: -

我将mime类型( application / vnd.ms-excel )添加到mime类型文件,但是平均问题是codeigniter只接受文件名 userfile 。如果您将文件名设置为userfile,那么它可以工作。

我认为可能有另一种方式,但我无法找到它。

答案 5 :(得分:0)

首先在允许的类型中输入'csv'

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

第二次转到/config/mimes.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'
 ),