0

我正在使用 html5 和 xhr 进行多文件上传,如您所见,我正在循环发送请求,这是一个不好的概念,但是当我将文件发送到循环外并且只有最后一个文件得到时,我无法上传文件上传。我哪里错了?

$('#uploadimg').on('click', function(e) {

    var files = document.getElementById('files').files;

    var formData = new FormData();
    for (var i = 0; i < files.length; i++) {
        formData.append('file', files[i]);

        var xhr = new XMLHttpRequest();
        xhr.open('POST', 'http://localhost/ajaxuploader/upload/uploadimg');
        xhr.onload = function() {
            if (xhr.status === 200) {
                console.log('all done: ' + xhr.status);
            } else {
                console.log('Something went terribly wrong...');
            }
        };

        xhr.send(formData);

    }

    // now post a new XHR request
});

代码点火器

public function uploadimg (){

    $config['upload_path'] = FCPATH . 'uploads/' ;
    $config['allowed_types'] = 'gif|jpg|png|jpeg|pdf|doc';

    $config['remove_spaces'] = 'TRUE';

    $this -> load -> library('upload', $config);
    //$this->upload->initialize($config);

    foreach ($_FILES as $k => $f) :
        $this -> upload -> do_upload($k);
    endforeach;
    //$this->index();
}
4

2 回答 2

0

您应该首先查看的似乎是您的 js for 循环。ID应该是唯一的,所以我会排除这种方法。

我可能会循环每个输入字段,检查 attr type == 文件,然后将其附加到您的 formData 对象。

var inpts    = document.getElementsByTagName('input');      

    for(var i=0; i < inpts.length; i++)
    {
       if(inpts[i].getAttribute('type') == 'file')
       {
           formData.append('myFiles[]', inpts[i].files[0]);
       }
    }

在服务器端,我会查看您的 foreach 循环,也许 for 循环就足够了。

for($i=0; $i < count($_FILES); $i++){
   $this->upload->initialize(); //new initialization for each file
   $this->upload->do_upload($_FILES[$i]);
   continue;
};
于 2012-07-16T20:49:10.810 回答
0

大家好,我发现问题codeigniter工作正常,问题出在jquery中。这是导致问题的线路。“formData.append(文件[i].name,文件[i]);” 感谢大家为解决我的问题所做的努力

$('#uploadimg').on('click', function(e) {
            //console.log(files);
            //               files = document.getElementById('files').files;
            var formData = new FormData();
            $(files).each(function(i) {
                formData.append(files[i].name, files[i]);
            })
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'http://localhost/ajaxuploader/upload/uploadimg');
            xhr.onload = function(data) {
                console.log(xhr.responseText);
            };

            xhr.send(formData);
        });
于 2012-07-18T08:32:52.760 回答