codeigniter upload-> do_upload()与$ _FILES而不是字段名称

时间:2018-02-08 16:57:43

标签: javascript php jquery ajax codeigniter

是否可以使用CodeIgniter上传库使用$ _FILE var进行上传?

 $this->upload->do_upload('field_name')

它需要html字段名称作为参数。但我需要使用de $ _FILES进行上传。

问题是: 我必须能够在提交之前向表单添加更多照片。我使用(+)按钮克隆字段。像这样:

HTML:

...

<span onclick='duplicarCampos()'> + </span>

<div class="form-group">

    <div id="destino" class="col-lg-12">

        <div id="fabricas" class="col-lg-4 fabricas">

            <label>Imagem:</label>
            <input name="img[]" type="file" class="form-control">

            <label>Link:</label>
            <input name="link[]" type="text" class="form-control">

        </div>
    </div>
</div>

...

我用AJAX提交表单,如下:

JS TO SUBMIT:

...

var imagens = $("input[name='img[]']").map(function () {
    return   $(this).prop("files")[0];
}).get();

var links = $("input[name='link[]']").map(function () {
    return   $(this).val();
}).get();

var form_data = new FormData();

for(i=0; i<imagens.length; i++){
    form_data.append("imagens_"+i,imagens[i]);
    form_data.append("links_"+i,links[i]);
}
form_data.append("lastIndice",(i-1));

$.ajax({
    ...
});

...

在我的 PHP控制器中,我收到它们:

...    

for($i=0; $i < $lastIndice+1; $i++){
    $links[$i] = $_POST["links_".$i];
}

for($j=0; $j < $lastIndice+1; $j++){
    $imagens[$j] = $_FILES["imagens_".$j];
}

...

现在,我想使用CodeIgniter 的上传库上传每张图片。但我知道它的唯一方法是使用 html字段名称,而不是 $ _ FILES 作为do_upload()的参数......

使用UPLOAD LIBRARY:

...

if(!$ci->upload->do_upload($this->nome_campo)) {
    ...
}

...

我可以上传&#34;通常&#34;使用PHP,但我是CodeIgniter的新手,我想学习如何使用它。

1 个答案:

答案 0 :(得分:2)

从当前迭代的外观来看:

for($j=0; $j < $lastIndice+1; $j++){
    $imagens[$j] = $_FILES["imagens_".$j];
}

看起来你的$_FILES数组是以这种方式构建的(例子):

(
    [imagens_0] => Array
        (
            [name] => foo.txt
            [type] => text/plain
            [tmp_name] => /tmp/phpYzdqkD
            [error] => 0
            [size] => 123
        )

    [imagens_1] => Array
        (
            [name] => bar.txt
            [type] => text/plain
            [tmp_name] => /tmp/phpeEwEWG
            [error] => 0
            [size] => 456
        )
)

Codeigniter的do_upload()期望保存文件信息的$ _FILES数组的键值。因此,通过以这种方式更改for循环,您应该能够上传它:

for($j=0; $j < $lastIndice+1; $j++){
    $this->upload->do_upload("imagens_".$j);
}