【问题标题】:Weird MIME type on ajax upload in CodeigniterCodeigniter 中 ajax 上传的奇怪 MIME 类型
【发布时间】:2012-05-11 07:57:24
【问题描述】:

我在 codeigniter 中上传 csv 文件时总是遇到无效的文件类型错误。我已经用谷歌搜索了 csv 可能的 mime 类型,但仍然没有任何效果。所以我打扰回显 echo $_FILES['userfile']['type'];我得到了这个 MIME 类型:'application/force-download'。下面是来自控制器的 sn-p 和来自视图的 sn-p

控制器:

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>

【问题讨论】:

    标签: javascript jquery ajax codeigniter csv


    【解决方案1】:

    这里的问题是不同的网络浏览器对文件的类型有不同的想法。由于 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;
    

    【讨论】:

      猜你喜欢
      • 2011-06-09
      • 2012-06-01
      • 1970-01-01
      • 2011-01-01
      • 2013-10-20
      • 2012-01-22
      • 2014-08-25
      • 2011-09-22
      • 2013-05-24
      相关资源
      最近更新 更多