gpt4 book ai didi

php - 无法使用 Codeigniter 上传 base64 编码的图像

转载 作者:可可西里 更新时间:2023-10-31 22:45:53 25 4
gpt4 key购买 nike

我必须上传我从 Android 应用程序接收到的 base64 编码图像。我正在使用 php codeigniter 框架。在论坛中搜索时,此链接的问题 How to upload base64encoded image in codeigniter和我的一样,但那里的解决方案对我不起作用。

这是我写的代码:

private function _save_image() {
$image = base64_decode($_POST['imageString']);
#setting the configuration values for saving the image
$config['upload_path'] = FCPATH . 'path_to_image_folder';
$config['file_name'] = 'my_image'.$_POST['imageType'];
$config['allowed_types'] = 'gif|jpg|jpeg|png';
$config['max_size'] = '2048';
$config['remove_spaces'] = TRUE;
$config['encrypt_name'] = TRUE;


$this->load->library('upload', $config);
if($this->upload->do_upload($image)) {
$arr_image_info = $this->upload->data();
return ($arr_image_info['full_path']);
}
else {
echo $this->upload->display_errors();
die();
}
}

我收到“您没有选择要上传的文件”

感谢您的宝贵时间。

最佳答案

发生错误是因为 codeigniter 的上传库将查看 $_FILES 超全局并搜索您在 do_upload() 调用中提供的索引。

此外(至少在版本 2.1.2 中)即使您设置 $_FILES 超全局来模仿文件上传的行为,它也不会通过,因为上传库使用 is_uploaded_file准确地检测出这种对超全局变量的篡改。您可以跟踪 system/libraries/Upload.php:134 中的代码

恐怕您将不得不重新执行大小检查以及文件重命名和移动(我会这样做),或者您可以修改 codeigniter 以省略该检查,但这可能会使以后升级框架变得困难。

  1. 将 $image 变量的内容保存到临时文件,并将 $_FILES 设置为如下所示:

     $temp_file_path = tempnam(sys_get_temp_dir(), 'androidtempimage'); // might not work on some systems, specify your temp path if system temp dir is not writeable
    file_put_contents($temp_file_path, base64_decode($_POST['imageString']));
    $image_info = getimagesize($temp_file_path);
    $_FILES['userfile'] = array(
    'name' => uniqid().'.'.preg_replace('!\w+/!', '', $image_info['mime']),
    'tmp_name' => $temp_file_path,
    'size' => filesize($temp_file_path),
    'error' => UPLOAD_ERR_OK,
    'type' => $image_info['mime'],
    );
  2. 修改上传库。您可以使用 codeigniter 的内置 way of Extending Native Libraries ,并定义一个 My_Upload(或您的前缀)类,复制粘贴 do_upload 函数并更改以下行:

    public function do_upload($field = 'userfile')

    到:

    public function do_upload($field = 'userfile', $fake_upload = false)

    和:

    if ( ! is_uploaded_file($_FILES[$field]['tmp_name']) )

    到:

    if ( ! is_uploaded_file($_FILES[$field]['tmp_name']) && !$fake_upload )

    然后在您的 Controller 中,使用流动参数调用 do_upload():

    $this->upload->do_upload('userfile', true);

关于php - 无法使用 Codeigniter 上传 base64 编码的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11578407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com