CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”

Posted

技术标签:

【中文标题】CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”【英文标题】:Ajax upload in CodeIgniter returns "you did not select a file to upload" 【发布时间】:2015-12-17 04:19:42 【问题描述】:

我尝试在 CodeIgniter 中通过 Ajax 上传图片,但总是收到错误消息“您没有选择要上传的文件”。

这里是 jQuery 代码:

$(document).ready(function (e) 
    $('#submitUpload').bind('click', function(evt) 
        var $btn = $(this).button('loading');
        var formData = new FormData();
        var inputImage = $('#inputImage')[0];
        console.log(inputImage.files[0]);
        formData.append('file', inputImage.files[0]);
        $.ajax(
            url: baseUrl + 'trainings/uploadImageAsync',
            type: 'post',
            dataType: 'json',
            data: formData,
            contentType: false,
            cache: false,
            processData: false,
            success: function(data) 
                console.log(data);
                $btn.button('reset');
            
        );
    );
);

这是表格部分:

<div class="modal-body" id="bodyTrainingForm">
    <form class="form-horizontal" id="formTrainingForm" enctype="multipart/form-data">
        <div class="form-group">
            <label for="inputTitle" class="col-sm-2 control-label">Title</label>
            <div class="col-sm-9">
                <input type="text" class="form-control" id="inputTitle" name="title" placeholder="Title">
            </div>
        </div>
        <div class="form-group">
            <label for="inputImg" class="col-sm-2 control-label">Image</label>
            <div class="col-sm-9">
                <img class="img-thumbnail" src="holder.js/140x140">
                <input class="form-control" type="file" name="file" id="inputImage" required>
                <button data-loading-text="Loading..." type="button" class="btn btn-default" id="submitUpload">Upload</button>
            </div>
        </div>
    </form>
</div>

还有似乎可以工作的 php 部分:

public function uploadImageAsync()

    $config['upload_path'] = base_url() . 'asset/img/thumbnails/';
    $config['allowed_types'] = 'jpg|png';
    $config['max_size'] = 1024 * 8;
    $config['max_width'] = 140;
    $config['max_height'] = 140;

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

    if (!$this->upload->do_upload()) 
        echo json_encode(array(
            'error' => $this->upload->display_errors(),
        ));
        return;
    
    echo json_encode(array(
        'success' => $this->upload->data(),
    ));

console.log(inputImage.files[0]);完美返回我想附加到 FormData 的文件,这似乎不起作用。我在这里错过了什么?

【问题讨论】:

【参考方案1】:

我明白了。我认为您应该先尝试更改文件夹的权限。我希望这可以帮助 Chmod 777 to a folder and all contents

【讨论】:

您好,感谢您的努力。事实证明,权限一直都是正确设置的。我只是未能正确指向上传目录。我不应该添加base_url() ...正确的声明是$config['upload_path'] = './assets/img/thumbnails/';【参考方案2】:

尝试在你的上传文件中包含一个文件->do_upload()

if(!$this->upload->do_upload('file') /* error */ 

【讨论】:

感谢您的回答,但我想我找到了问题所在,只是不知道如何解决。上传路径似乎不可写,因为die(debug(is_writable($config['upload_path']))); 返回false。我只是不知道正确设置权限。我在 Win10 上用 xampp...【参考方案3】:

我自己想通了!我的错误是将base_url() 添加到$config['upload_path']。应该这样做:

$config['upload_path'] = './assets/img/thumbnails/';

【讨论】:

以上是关于CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”的主要内容,如果未能解决你的问题,请参考以下文章

使用ajax在codeigniter中上传图片

codeigniter 中的 Ajax 表单验证

Codeigniter 图片上传使用 jquery 和 ajax 错误 [重复]

CodeIgniter AJAX文件上传,上传时$_FILE为空

Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行

如何创建ajax请求以使用DataTable和Codeigniter并在同一文件中返回