当前位置: 首页 > 知识库问答 >
问题:

使用CodeIgniter 2.0上传多个文件(阵列)

丘飞
2023-03-14

我已经寻找和努力了三天,让这个工作,但我就是做不到。我想做的是使用多文件输入表单,然后上传它们。我不能只使用固定数量的文件上传。我在StackOverflow上尝试了许多解决方案,但我找不到一个有效的。

这是我的上传控制器

<?php

class Upload extends CI_Controller {

function __construct()
{
    parent::__construct();
    $this->load->helper(array('form', 'url','html'));
}

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

function do_upload()
{
    $config['upload_path'] = './Images/';
    $config['allowed_types'] = 'gif|jpg|png';


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

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

        if( ! empty($key['name']))
        {

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

            if ( ! $this->upload->do_upload($key))
            {
                $error['error'] = $this->upload->display_errors();

                $this->load->view('pages/uploadform', $error);
            }    
            else
            {
                $data[$key] = array('upload_data' => $this->upload->data());

                $this->load->view('pages/uploadsuccess', $data[$key]);


            }
         }

    }    
  }    
 }
 ?> 

我的上传表格是这样的。

 <html>
 <head>
    <title>Upload Form</title>
</head>
<body>

<?php echo $error;?>

<?php echo form_open_multipart('upload/do_upload');?>

<input type="file" multiple name="userfile[]" size="20" />
<br /><br />


<input type="submit" value="upload" />

</form>

</body>
</html> 

我一直有这样的错误:

您没有选择要上载的文件。

下面是示例的数组:

数组

如果我选择2个文件,我有这样的连续5次。我也使用标准的上传库。

共有3个答案

董飞
2023-03-14

试试这个代码。

这对我来说很好

每次启动库时都必须初始化

    function do_upload()
    {
        foreach ($_FILES as $index => $value)
        {
            if ($value['name'] != '')
            {
                $this->load->library('upload');
                $this->upload->initialize($this->set_upload_options());

                //upload the image
                if ( ! $this->upload->do_upload($index))
                {
                    $error['upload_error'] = $this->upload->display_errors("<span class='error'>", "</span>");
                    
                    //load the view and the layout
                    $this->load->view('pages/uploadform', $error);

                    return FALSE;
                }
                else
                {
                    
                     $data[$key] = array('upload_data' => $this->upload->data());

                     $this->load->view('pages/uploadsuccess', $data[$key]);

       
                }
            }
        }

    }

    private function set_upload_options()
    {   
        //upload an image options
        $config = array();
        $config['upload_path'] = 'your upload path';
        $config['allowed_types'] = 'gif|jpg|png';
        
        return $config;
    }

进一步编辑

我已经找到了一种方法,你必须上传一个独特的输入框你的文件

CodeIgniter不支持多个文件。在foreach中使用do_upload()与在外部使用没有什么不同。

您需要在没有CodeIgniter帮助的情况下处理它。这里有一个例子https://github.com/woxxy/FoOlSlide/blob/master/application/controllers/admin/series.php#L331-370

https://stackoverflow.com/a/9846065/1171049

这就是你在信中说的:)

颛孙凯定
2023-03-14

您应该在CI中使用此库进行多次上载https://github.com/stvnthomas/CodeIgniter-Multi-Upload

安装只需复制MY_上传。php文件到应用程序库目录。

用途:在控制器中进行功能测试

public function test_up(){
if($this->input->post('submit')){
    $path = './public/test_upload/';
    $this->load->library('upload');
    $this->upload->initialize(array(
        "upload_path"=>$path,
        "allowed_types"=>"*"
    ));
    if($this->upload->do_multi_upload("myfile")){
        echo '<pre>';
        print_r($this->upload->get_multi_upload_data());
        echo '</pre>';
    }
}else{
    $this->load->view('test/upload_view');
}

}

上传您的视图。应用程序/视图/测试文件夹中的php

<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile[]" id="myfile" multiple>
<input type="submit" name="submit" id="submit" value="submit"/>
云宝
2023-03-14

在你的帮助下,我终于成功了!

这是我的密码:

 function do_upload()
{       
    $this->load->library('upload');

    $files = $_FILES;
    $cpt = count($_FILES['userfile']['name']);
    for($i=0; $i<$cpt; $i++)
    {           
        $_FILES['userfile']['name']= $files['userfile']['name'][$i];
        $_FILES['userfile']['type']= $files['userfile']['type'][$i];
        $_FILES['userfile']['tmp_name']= $files['userfile']['tmp_name'][$i];
        $_FILES['userfile']['error']= $files['userfile']['error'][$i];
        $_FILES['userfile']['size']= $files['userfile']['size'][$i];    

        $this->upload->initialize($this->set_upload_options());
        $this->upload->do_upload();
    }
}

private function set_upload_options()
{   
    //upload an image options
    $config = array();
    $config['upload_path'] = './Images/';
    $config['allowed_types'] = 'gif|jpg|png';
    $config['max_size']      = '0';
    $config['overwrite']     = FALSE;

    return $config;
}

谢谢你们!

 类似资料:
  • 问题内容: 有没有办法用Flask接收多个上传的文件?我尝试了以下方法: 然后打印内容 如果我上传多个文件,它将仅打印该集中的第一个文件: 是否可以使用Flask的内置上传处理方式接收多个文件?谢谢你的帮助! 问题答案: 你可以使用flask.request.files的方法getlist,例如:

  • 问题内容: 我最近一直在尝试使用PHP,到目前为止一直很好,直到碰到一堵墙为止。这是我的一小段代码。它允许我上传单个文件,但是我想要的是能够上传多个文件。 这是PHP和HTML文件: 和PHP文件: 任何帮助将不胜感激。 问题答案: Index.html load.php

  • 问题内容: 我需要使用Laravel 5.1作为后端将图像和视频文件上传到Angular应用程序中的服务器。所有Ajax请求都需要首先发送到Laravel控制器,并且我们在这里有代码说明文件到达那里后如何处理。以前,我们已经完成了普通的HTML表单以将文件上传提交到控制器,但是在这种情况下,我们需要避免刷新表单的页面,因此我尝试通过Angular在Ajax中进行尝试。 我需要将以前通过HTML表单

  • 我试图理解以下文档: Transferutility.UploadDirectory null null null

  • 我正在尝试设置一个endpoint,允许多个文件上传,以及其他表单数据。将其视为一个创建产品页面,其中包含两个产品图像以及其他信息。理想情况下,我希望将请求映射到POJO POJO: 但这不管用,我明白了: 如果我删除,它就可以正常工作。 看来< code>List也有同样的问题 哪个抛出 : 我已经看到了使用

  • 但是如何为多个文件做呢? PS.在webflux中有没有另一种上传一组文件的方法?