Codeigniter& HTML5 - 尝试一次上传多个图像

时间:2012-03-28 08:20:11

标签: php codeigniter file-upload codeigniter-2

查看看起来像这样

<?=form_open_multipart('upload/process');?>
        <input type="file" multiple="multiple" name="userfile[]" id="userfile" />
        <?=form_submit('upload', 'Upload');?>
    <?=form_close();?>

我希望用户能够一次上传多张图片。一旦上传,我想在数据库中输入图像细节,最后将图像移动到uploads文件夹。

我有codeigniter的基本知识

ps:我不想使用uploadify或类似的图片上传插件。试图尽可能保持轻量化

更新 当我尝试var_dump($ _ FILES ['userfile'])时,这是我得到的那种数组。我应该使用什么样的循环来分离各个图像的数据。

 array
  'name' => 
    array
      0 => string '01.jpg' (length=6)
      1 => string '1 (26).jpg' (length=10)
  'type' => 
    array
      0 => string 'image/jpeg' (length=10)
      1 => string 'image/jpeg' (length=10)
  'tmp_name' => 
    array
      0 => string 'C:\wamp\tmp\php2AC2.tmp' (length=23)
      1 => string 'C:\wamp\tmp\php2AD3.tmp' (length=23)
  'error' => 
    array
      0 => int 0
      1 => int 0
  'size' => 
    array
      0 => int 409424
      1 => int 260343

3 个答案:

答案 0 :(得分:8)

我也遇到了这个问题。 $_FILES数据被发送一个不同的结构(由于multiple=""属性),因此codeigniter无法处理它。在上传过程之前添加前缀:

$arr_files  =   @$_FILES['userfile'];

$_FILES     =   array();
foreach(array_keys($arr_files['name']) as $h)
$_FILES["file_{$h}"]    =   array(  'name'      =>  $arr_files['name'][$h],
                                    'type'      =>  $arr_files['type'][$h],
                                    'tmp_name'  =>  $arr_files['tmp_name'][$h],
                                    'error'     =>  $arr_files['error'][$h],
                                    'size'      =>  $arr_files['size'][$h]);

然后在循环函数中使用:

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

$arr_config =   array(  'allowed_types' =>  'gif|jpg|png',
                            'upload_path'   =>  'url_path/');

foreach(array_keys($_FILES) as $h) {

    // Initiate config on upload library etc.

    $this->upload->initialize($arr_config);

    if ($this->upload->do_upload($h)) {

        $arr_file_data  =   $this->upload->data();

    }

}

<强>解释
我只是将$_FILES的结构更改为在默认<input type="file" />上发送的公共结构,并运行循环,获取所有键名。

答案 1 :(得分:1)

你需要的循环:

for($i=0; $i<count($_FILES['name']); $i++){
    if ($_FILES['error'][$i] == 0) {
        //do your stuff here, each image is at $_FILES['tmp_name'][$i]
    }
}

请注意,它不是使用CI上传类,而是使用普通的PHP,我通常觉得它更容易使用而不是CI的类。

答案 2 :(得分:0)

查看此课程,了解多个文件上传https://github.com/stvnthomas/CodeIgniter-Multi-Upload

这对我有用。