Jquery - CodeIgniter 如何为 blob 提供文件扩展名

Zaf*_*far 2 jquery blob codeigniter

我有这种情况,我通过 ajax 将图像 blob 发送到 CI 控制器,然后上传它。数据发送完美,但只有当服务器尝试上传文件时,它才会失败。我注意到它需要一个带有扩展名的文件类型。由于它没有提供,它失败了。CI 分析器将发布的文件显示为:

Array
(
[name] => blob
[type] => image/png
[tmp_name] => D:xampptmpphpC5EA.tmp
[error] => 0
[size] => 634208
)
Run Code Online (Sandbox Code Playgroud)

虽然它应该是这样的:

Array
(
[name] => featured.jpg
[type] => image/jpeg
[tmp_name] => D:xampptmpphpABDE.tmp
[error] => 0
[size] => 634208
)
Run Code Online (Sandbox Code Playgroud)

我怀疑这是失败的地方。这是我的上传功能代码:

public function upload__image($path, $image){
    $this->output->enable_profiler(TRUE);
    $config['upload_path'] = "./assets/images/$path";
    $config['allowed_types'] = 'png|jpeg|jpg|gif';
    $config['remove_spaces'] = TRUE;
    $config['file_name'] = parent::getGUID();
    $this->load->library('upload', $config);
    $this->upload->initialize($config);

    if (!$this->upload->do_upload("$image"))
    {
        $msg = $this->upload->display_errors('', '');
        return false;
    }
    else
    {
        $data = $this->upload->data();
        return $data['file_name'];
    }
}
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。非常感谢。修复应该在客户端使用 Jquery 还是在服务器端完成?请推荐最佳方法。

更新

$('#saveme').click(function() {
$croppMe.cropper('getCroppedCanvas').toBlob(function (blob) {
var formData = new FormData();
var tid = $('#myid').val();
formData.append('croppedImage', blob);
formData.append('tid', tid);
$.ajax('upload.php', {
method: "POST",
data: formData,
processData: false,
contentType: false,
success: function (response) {
  if(response.Response == 200)
  {
    console.log("Upload successful"+response.Data);
  }
  else
  {
    console.log("some error occured");
  }
}
});
});
Run Code Online (Sandbox Code Playgroud)

更新 2 我的 php 上传函数返回此错误,当我将其设置为显示错误时:

不允许您尝试上传的文件类型。

Mus*_*usa 5

该方法FormData.append具有第三个参数,用于指定用于 blob 的文件名

formData.append('croppedImage', blob, 'featured.jpg');
Run Code Online (Sandbox Code Playgroud)