繁体   English   中英

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

[英]codeigniter upload->do_upload() with $_FILES instead of field name

使用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提交:

...

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()的参数...

使用上传库:

...

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

...

我可以使用PHP“正常”进行上载,但是我是CodeIgniter的新手,我想学习如何使用它进行操作。

从当前迭代的外观来看:

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
        )
)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM