CodeIgniter ajax上传图片(ajax正常工作,但CodeIgniter无法正常运行)

4

我知道如何通过传统方式使用ajax上传图片。然而,使用CodeIgniter的library upload时,我无法弄清楚。

但首先,让我告诉你,我根本不使用表单

if(!empty($_FILES)){

    $this->load->helper('global_helper');

    $config['upload_path']   = base_url() + "public/images/";
    $config['file_name']     = randomName();
    $config['allowed_types'] = "jpg|png|bmp";
    $config['max_size']   = '500';
    $config['overwrite']      = FALSE;

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

    if(!$this->upload->do_upload()){
        $error = array('error' => $this->upload->display_errors());
        print_r($error);
    }
}

这个不起作用,因为我收到了以下错误信息:
Array
(
    [error] => <p>You did not select a file to upload.</p>
)

但事实上,我已经上传到服务器了,因为如果我打印出 $_FILES,我会收到以下信息:

Array
(
    [0] => Array
        (
            [name] => no_image.png
            [type] => image/png
            [tmp_name] => C:\xampp\tmp\php1715.tmp
            [error] => 0
            [size] => 6361
        )

)

可能是输入数据为数组(数组[0]的数组)的问题?

以下是JavaScript代码:

event.stopPropagation();
event.preventDefault();
var data = new FormData();

if(picture != undefined){ 
    $.each(picture, function (key, value) {
        data.append(key, value);
    });
}

$.ajax({
    url: 'ajax_add',
    type: 'POST',
    data: data,
    cache: false,
    processData: false,  
    contentType: false, 
    success: function(aux){
        console.log(aux);
    }
});

我希望不必采用传统的方式,但如果必要的话就只好如此。
谢谢。

HTML侧表单字段的名称是什么?|| <input type="file" name="??" /> || 另外,您是否使用了表单multipart? - Dave
1个回答

0

不确定是否可行,因为文件上传类是设计用于与表单一起使用的,但您可以尝试这样做。

$this->upload->do_upload(0);

如果我所想的是正确的,它将选择$_FILES数组的第一项。默认情况下,它会尝试查找$_FILES['userfile'],但这里不存在(这就是为什么会出现错误的原因)。
试一试,我们看看是否有效 :)

我已经接近成功了。之前我尝试过 $this->upload->do_upload($_FILES[0]);,但是没有成功。但是你的解决方案起作用了。谢谢你。 - Linesofcode
1
你可以直接查看位于 system/library/Upload.phpdo_upload() 函数,从而理解它的工作原理 :) - Adrian Tombu
是的,$field = 'userfile' - Linesofcode
@Linesofcode 嗯,我在传统上传方面遇到了困难,实际上它是可以工作的,我的函数正在执行上传和数据库插入操作,但当我将数据投放到数据库时,它不会返回以显示图像。你想看代码来帮助吗?谢谢。 - Habib Rehman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接