【问题标题】:two multiple file uploader in codeigniter在codeigniter中上传两个多文件
【发布时间】:2015-10-31 05:57:48
【问题描述】:

我一直尝试在 codeigniter 项目中以一个表单两次上传多张照片,虽然照片上传正确,但照片名称未按预期返回。例如,如果我在第一个上传者中上传一张名为“a.jpg”的照片,在第二个上传者中上传一张名为“b.jpg”的照片,我得到的名字是“a.jpg,b.jpg”和“b.jpg,b” (1).jpg" 用于第二种情况。下面是附上的代码。

控制器:-

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Imageupload extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->helper(array('form', 'url'));
    }

    function index()
    {
        $this->load->view('imageupload_view', array('error' => ' ' ));
    }

    function doupload()
    {
        $name_array = array();
        $count = count($_FILES['userfile']['size']);
    //  echo $count;
        foreach($_FILES as $key=>$value)
        for($s=0; $s<=$count-1; $s++)
        {
            $_FILES['userfile']['name']=$value['name'][$s];
            $_FILES['userfile']['type']    = $value['type'][$s];
            $_FILES['userfile']['tmp_name'] = $value['tmp_name'][$s];
            $_FILES['userfile']['error']       = $value['error'][$s];
            $_FILES['userfile']['size']    = $value['size'][$s];
            $config['upload_path'] = 'application/views/uploads';
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = '1000000';
            //$config['max_width']  = '1024';
            //$config['max_height']  = '768';
            $this->load->library('upload', $config);
            $this->upload->do_upload();
            $data = $this->upload->data();
            $name_array[] = $data['file_name'];
        }

        $names= implode(',', $name_array);
        return $names;
    }

    function doupload_1()
    {
        $name_array = array();
        $count = count($_FILES['file_1']['size']);
        echo $count;
        foreach($_FILES as $key=>$value)
        for($s=0; $s<=$count-1; $s++)
        {
            $_FILES['file_1']['name']=$value['name'][$s];
            $_FILES['file_1']['type']    = $value['type'][$s];
            $_FILES['file_1']['error']       = $value['error'][$s];
            $_FILES['file_1']['tmp_name'] = $value['tmp_name'][$s];
            $_FILES['file_1']['size']    = $value['size'][$s];
            $config['upload_path'] = 'application/views/uploads';
            $config['allowed_types'] = 'gif|jpg|png';
            $config['max_size'] = '1000000';
            //$config['max_width']  = '1024';
            //$config['max_height']  = '768';
            $this->load->library('upload', $config);
            $this->upload->do_upload();
            $data = $this->upload->data();
            $name_array[] = $data['file_name'];
        }

        $names= implode(',', $name_array);
        return $names;
    }

    public function check()
    {
        $data = $this->doupload();
        $data_1 = $this->doupload_1();
        print_r($data);
        echo "<br>";
        print_r($data_1);
    }

}
?>

查看:-

<html>
<head>
<title>Upload Form</title>
</head>
<body>
<?php echo form_open_multipart('imageupload/check');?>
<input name="userfile[]" id="userfile" type="file" multiple="" />
<input name="file_1[]" id="file" type="file" multiple=""/>
<input type="submit" value="upload" />
<?php echo form_close() ?>
</body>
</html>

提前致谢!

【问题讨论】:

  • 我听不懂你的问题-请告诉我?
  • 你想要加密形式的文件名吗??
  • 我想将文件名存储在数据库中,所以第一个字段 userfile 应该包含在 doupload() 函数中上传的文件名,file_1 应该包含在 doupload1() 函数中上传的文件名
  • 但是为什么你要带两个上传者。只需使用一个上传器,您就可以上传多张图片,例如添加按钮“添加更多图片”。
  • 告诉我这是否是您的要求。你的 html 中有两个文件字段?以及代码upload1和upload中的两个函数?您要从两个输入字段上传两张两张图片?但是您的两个 codeigniter 代码运行四四次?

标签: php codeigniter file-upload


【解决方案1】:

请查看以下链接以在 codeigniter 中上传多个文件

http://technet.massivetechnolab.co.in/multiple-image-uploading-using-codeigniter

【讨论】:

  • 实际上我知道这种技术,但它仅适用于我有一个用于多次上传的字段,但我的案例包含两个用于多次上传的字段。
【解决方案2】:

多重上传功能

public function mupload ($field_name,$path = './botimage/') {

    $files = $_FILES;
    $cpt = count($_FILES[$field_name]['name']);
    for ($i = 0; $i < $cpt; $i++) {
        $config =  array(
            'upload_path'     => $path,
            'upload_url'      => upload_url('galeri/'),
            'allowed_types'   => "gif|jpg|png|jpeg",
            'overwrite'       => TRUE,
            'file_name'       => rand(0,999). time(),
            'max_size'        => "10000KB",
        );
        $data = array();
        // set the filter image types
        $this->load->library('upload', $config);
        $_FILES['userfile']['name'] = $files[$field_name]['name'][$i];
        $_FILES['userfile']['type'] = $files[$field_name]['type'][$i];
        $_FILES['userfile']['tmp_name'] = $files[$field_name]['tmp_name'][$i];
        $_FILES['userfile']['error'] = $files[$field_name]['error'][$i];
        $_FILES['userfile']['size'] = $files[$field_name]['size'][$i];

        $this->upload->initialize($config);
        if ($this->upload->do_upload()) {
            $tmp = $this->upload->data();
            $uploaded_file_data[$i] = $tmp["file_name"];
        } else {
            $errors[] = $this->upload->display_errors();
        }
    }

    $data["file_urls"] = implode(",",$uploaded_file_data);
    $data["errors"] = implode(" ",@$errors);

    return $data;
}

【讨论】:

  • 和我的方法doupload()功能一样
  • 问题是我有两个这样的函数 doupload() 和 doupload_1() 因为我需要上传多张照片两次,它不起作用,但我只使用 doupload() 并尝试上传照片只拍一次,效果很好!
  • 我的代码的问题是,即使我尝试为第一种方法上传两个文件,为第二种方法上传两个文件,循环在每种方法中运行 4 次。
【解决方案3】:

最后我知道你的代码有什么问题。这是因为您在 $_FILES 上的 foreach 不在 $_FILES['userfile'] 上,这就是为什么 $_FILES 不仅包含用户文件,还包含所有文件。和文件_1

foreach($_FILES['userfile'] as $key=>$value)

foreach($_FILES['file_1'] as $key=>$value)

但您仍然必须根据 foreach 更改以下代码。 如果您找到答案的解决方案,请喜欢我的答案并接受它。

【讨论】:

  • 只返回第一个doupload()方法上传的文件名。
  • 你已经用uplaoder上传了b.jpg,你一次又一次尝试用uplaoder上传它,这就是它返回你b(1.jpg)的原因
  • 我尝试上传带有不同名称的照片,但它显示了不需要的结果。
  • 它仍然无法正常工作,虽然我按照你提到的那样实现了!
  • 它显示未定义的索引:名称,与类型、临时名称、错误、大小类似。如果你真的能帮我解决这个问题,我会非常感激。 @塔里克侯赛因
猜你喜欢
  • 2012-01-12
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 2012-09-18
  • 1970-01-01
  • 2012-03-07
  • 2015-01-07
相关资源
最近更新 更多