【问题标题】:How to save captured image inside folder using codeigniter (image captured by javascript code)?如何使用codeigniter(由javascript代码捕获的图像)将捕获的图像保存在文件夹中?
【发布时间】:2018-06-02 04:55:25
【问题描述】:

大家好,我已经编写了代码来在单击按钮时捕获 div 标签的图像,javascript 代码将捕获该图像,但我想使用 codeigniter 保存捕获的图像,但我们不能使用默认的 codeigniter 上传方法,因为只能上传适用于创建一个对象的输入类型文件,但在这里通过 javascript 获取捕获的图像,所以我想将该图像上传到文件夹中,所以请告诉我如何使用 codeigniter 来做到这一点。下面我提到了我的代码。

Html code....
<div id="target" style="border: 1px solid #CCC;padding: 5px;margin: 5px;">
    <div>
        <p>PHP is a server-side scripting language designed primarily for web development.</p>
    </div>
</div>
 <form method="POST" enctype="multipart/form-data" id="form1">
        <input type="hidden" name="img_value" id="img_value" value="" />
    </form>
<input type="submit" value="Screenshot" onclick="capture();" />

javascript代码捕获图像并调用ajax保存图像

<script type="text/javascript">
        function capture() {
            $('#target').html2canvas({
                onrendered: function (canvas) {
                    //Set hidden field's value to image data
                    $('#img_value').val(canvas.toDataURL("image/png"));
                    //Submit the form1
                    var hid_img=$("#img_value").val();
                    $.ajax({
                        url: "<?= base_url('controller/save_img') ?>",
                        type: "POST",
                        data: {
                            hid_img: hid_img,
                        },
                        success: function (response) {

                            $(".show_img").html(response);

                        }
                    });
                }
            });
        }
    </script>

codeigniter 的控制器方法中的代码用于将图像保存在文件夹中...

public function save_img() {

$data = $this->input->post($hid_img);
    $file = md5(uniqid()) . '.png';

    // remove "data:image/png;base64,"
    $uri =  substr($data,strpos($data,",")+1);

    // save to file in uploads folder of codeigniter
    file_put_contents('./uploads'.$file, base64_decode($uri));

}
to store image in table
$res=$this->db->insert('demo',array('img'=>base_url('uploads/').$file));
    $detail = $this->db->select('*')->from('demo')->where('id', $this->db->insert_id())->get()->row();
    echo '<img src="'.base_url('uploads/').$detail->message.'" style="width:500px;"/>';

【问题讨论】:

  • 您当前的解决方案有什么问题? $this-&gt;input-&gt;post($hid_img) 也应该是 $this-&gt;input-&gt;post('hid_img')
  • @Alex 此代码未将文件保存到文件夹
  • 好吧,如果这是您的实际代码,您应该会收到我在第一条评论中提到的错误。进行一些调试并返回错误。事情不会无缘无故地失败。
  • @Alex 显示错误,您没有选择要上传的文件
  • 不要使用回答代码的人。它不适用于您的情况,因为您甚至在问题中注意到了这一点。 ci 上传库只处理文件上传,而不是 base64 发布流。本质上,它仅在您有 file 输入时才有效。无论如何,使用您的代码,并修复我上面提到的错误并进行一些调试。

标签: javascript php codeigniter


【解决方案1】:

正如您正确阐明的那样,上传库仅适用于 file 输入,而不适用于 base64 流。所以你不能使用它。

使用您的方法,您的代码中有一些错误需要解决:

  1. $this-&gt;input-&gt;post($hid_img) 应该是 $this-&gt;input-&gt;post('hid_img')
  2. ./uploads 应该有一个结束斜线:'./uploads/'.$file

【讨论】:

  • 我应该使用哪个代码 file_put_content 或 codeigniter 上传方法
  • 如果您阅读了我之前的评论,应该很清楚。但是你的方法例如文件放内容
  • 我需要您的更多帮助,同时更新表中的路径我收到错误我在更新的问题中提到的代码插入路径请建议我解决方案。
  • 你真的应该开始一个新问题,而不是编辑一个已经回答的问题。重要信息丢失。反正我去睡觉了。当你创建一个新问题时,我会看看 tm,但到那时可能会有人回答你。
【解决方案2】:

使用此示例。它运作良好。首先,如果您检查上传库。

 $config = array(
        'upload_path' => "./uploads/",
        'allowed_types' => "gif|jpg|png|jpeg|pdf",
        'overwrite' => TRUE,
        'max_size' => "2048000", // Can be set to particular file size , here it is 2 MB(2048 Kb)
        'max_height' => "768",
        'max_width' => "1024"
        );
        $this->load->library('upload', $config);


        if(!$this->upload->do_upload('taskcat_img'))  
        {  
            echo $this->upload->display_errors();  
        }  
        else  
        {                   
            $data = $this->upload->data();  
            $imgval = array('success' => 'success' ,'data_image' => $data["file_name"]);  
            echo json_encode($imgval );
}

【讨论】:

  • 但是这里我没有得到输入类型文件,所以我怎么能拿 $this->upload->do_upload('taskcat_img');
  • 在完成您提到的所有步骤后,它显示错误“您没有选择要上传的文件”
  • $this->upload->do_upload('taskcat_img');你使用你的文件名(taskcat_img)
  • 我使用了我的文件名 $this->upload->do_upload($hid_img'');但仍然没有上传图片
  • 不要使用 $ 符号。($hid_img)。使用这个 $this->upload->do_upload("hid_img'');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多