【问题标题】:Ajax upload in CodeIgniter returns "you did not select a file to upload"CodeIgniter 中的 Ajax 上传返回“您没有选择要上传的文件”
【发布时间】: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 的文件,这似乎不起作用。我在这里错过了什么?

【问题讨论】:

    标签: php jquery ajax codeigniter


    【解决方案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/';
    

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 2013-07-26
      • 2015-11-07
      • 2014-03-05
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多