自定义上传图片组件的存储过程

2022-09-27 11:26 0

image

前端使用了图片上传组件来上传图片,那么后台如何来正确存储入库呢

网上找的一段图片上组件的 ,效果代码如下:



    
                  


比如这个字段名称叫tupian,对应我们的后台的字段,Image类型入库



模块内容发布为例:

1、复制template/pc/default/member/module_post.html到 template/pc/default/member/demo/module_post.html

2、通过url访问发布界面:/index.php?s=member&app=demo&c=home&m=add

3、在新的模板中,首先定义一个隐藏域来此图片字符串

4、处理提交函数


  
    function dr_my_post() {
        $('#dr_tupian').val($('.img_look').html()); // 这里把图片上传的编码赋值到隐藏域,然后我们后台处理图片转换
        $('#dr_is_draft').val(0);dr_ajax_submit('{dr_now_url()}', 'myform', '2000')
    }

5、二次开发模块的发布控制器

dayrui/App/Demo/Controllers/Member/Home.php

_Member_List();
 }

 public function add() {

  if (IS_POST) {
  // 表示发布前的处理
  $aid = 0; // 这个表示附件的存储策略id,0表示本地存储默认
      $img = $_POST['data']['tupian'];
      $_POST['data']['tupan'] = []; // 接收post过来的图片字符串
      if (preg_match_all('/url\((.+)\)/U', $img, $mt)) {
       foreach ($mt[1] as $t) {
        $content = str_replace('"', '', $t);
        // 把base64格式的图片转换为实际图片
        if (preg_match('/^(data:\s*image\/(\w+);base64,)/i', $content, $result)) {
              $ext = strtolower($result[2]);               if (!in_array($ext, ['png', 'jpg', 'jpeg'])) {                   $this->_json(0, dr_lang('图片格式不正确'));               }               $content = base64_decode(str_replace($result[1], '', $content));               if (strlen($content) > 30000000) {                   $this->_json(0, dr_lang('图片太大了'));               }                             // 上传到本地服务器               $rt = \Phpcmf\Service::L('upload')->base64_image([                   'ext' => $ext,                   'content' => $content,                   'attachment' => \Phpcmf\Service::M('Attachment')->get_attach_info($aid, 0),               ]);               if (!$rt['code']) {                   exit(dr_array2string($rt));               }               // 附件归档               $att = \Phpcmf\Service::M('Attachment')->save_data($rt['data']);               if (!$att['code']) {                   exit(dr_array2string($att));               }               $_POST['data']['tupan'][] = $att['code'];           } else {               $this->_json(0, dr_lang('图片内容不规范'));           }        }       }      }   $this->_Member_Add();  }  public function edit() {   $this->_Member_Edit();  }  public function del() {   $this->_Member_Del();  } }

6、提交后,后台就可以看到图片内容了

image



例子是以内容模块为例,表单相关提交方法跟这个类似了

上一篇:模块表单中判断提交title是否已经重复提交
下一篇:继承重写日期字段组件
相关文章
咨询
微信
电话