2012-05-11 5 views
0

codeigniterにcsvファイルをアップロードする際に、常に無効なファイルタイプエラーが発生しました。私はすでにcsvの可能性のあるMIMEタイプを探していましたが、まだ何も動作していません。だから私はecho $ _FILES ['userfile'] ['type'];私はこのMIMEタイプを取得しました: 'application/force-download'。以下は、ビューCodeigniterのajaxアップロードで奇妙なMIMEタイプ

コントローラからコントローラやスニペットから抜粋されて:ビュー

public function upload_file() 
{ 

$status = ""; 
$msg = ""; 
$file_element_name = 'userfile'; 

if (empty($_POST['title'])) 
{ 
    $status = "error"; 
    $msg = "Please enter a title"; 
} 

if ($status != "error") 
{ 
    $config['upload_path'] = './uploads/csv_list/'; 
    $config['allowed_types'] = 'gif|jpg|png|doc|txt|.csv'; 
    $config['max_size'] = 1024 * 8; 

    if (!$this->upload->do_upload($file_element_name)) 
    { 
    $status = 'error'; 
    $msg = $this->upload->display_errors('', ''); 

    } 
    else 
    { 

     $status = "success"; 
     $msg = "File successfully uploaded"; 

    } 
    @unlink($_FILES[$file_element_name]); 
    } 
    echo json_encode(array('status' => $status, 'msg' => $msg)); 
} 

<input type="text" name="title" id="title" value="a" style ="display:none"/> 

<p> 
    <input type="text" name="title" id="title" value="a" style ="display:none"/> 
    <label for="userfile">Upload CSV File</label> 
    <input type="file" name="userfile" id="userfile" size="20" /> 
    <input type="submit" name="submit" id="submit" value ="Upload"/> 
</p> 

<script> 
    $(function() { 
     $('#upload_file').submit(function (e) { 
      e.preventDefault(); 
      $.ajaxFileUpload({ 
       url: '../upload/upload_file/', 
       secureuri: false, 
       fileElementId: 'userfile', 
       dataType: 'json', 
       data: { 
        'title': $('#title').val() 
       }, 
       success: function (data, status) { 
        if (data.status != 'error') { 
         $('#files').html('<p>Reloading files...</p>'); 
         // refresh_files(); 
         // $("#userfile").replaceWith("<input type=\"file\" id=\"userfile\" size = \"20\" />"); 
         $('#files').html('File Uploaded'); 
         // $('#title').val(''); 
        } 
        alert(data.msg); 
       } 
      }); 
      return false; 
     }); 
    }); 
</script> 

答えて

2

ここでの問題は、異なるウェブでありますブラウザは、ファイルの種類についてさまざまなアイデアを得ます。 CodeIgniterのアップロードクラスはファイルタイプに依存しているので、これは乱雑になる可能性があります。

config/のフィールドにさらにタイプを追加するようにいくつかの指示がありましたが、いずれもそのトリックは行いませんでした。

私はすべての種類の$config['allowed_types'] = '*'できるようになってしまって、代わりに次のように検証:

if (in_array(end(explode('.', $str_file_name)), array('php'))) 
    return FALSE; 

またはあなたの場合:

$arr_validate = array('gif', 'jpg', 'png', 'doc', 'txt', 'csv'); 

if (! in_array(end(explode('.', $str_file_name)), $arr_validate)) 
    return FALSE; 
+0

おかげでロビンは、 –

+0

はどうもありがとうございました、それをしようとします。できます! –