前端使用了图片上传组件来上传图片,那么后台如何来正确存储入库呢
网上找的一段图片上组件的 ,效果代码如下:
比如这个字段名称叫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、处理提交函数
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、提交后,后台就可以看到图片内容了
例子是以内容模块为例,表单相关提交方法跟这个类似了