灵感来源于:http://www.dedejs.com/html/article-944-1.html ,不知道什么原因,原文作者写的比较简单,甚至对数据库的修改都没有完善,这里发挥一下。
第一步,参考上述文章,注册七牛帐号,开通空间,将织梦的“远程图片本地化”设置为否并集成七牛的SDK。
第二步, 打开/include/dialog/select_images.php文件,在里面找到如下代码:
$dh = dir($inpath);
在下面添加:
$qiniudomain = '七牛云存储域名';
记得把“七牛云存储域名”改成你的七牛云存储地址。
然后再找到:
$reurl = $reurl;
所有的都替换为:
$reurl = $qiniudomain.$reurl;
第三步,再打开/include/dialog/select_images_post.php文件,在里面找到下面这句代码:
$info = '';
在其上面添加如下代码:
//上传到七牛云存储start
require_once(dirname(__FILE__)."/../qiniu/io.php");
require_once(dirname(__FILE__)."/../qiniu/rs.php");
$qiniupath = substr($activepath,1);
$bucket = '云空间名';
$qiniudomain = '七牛云存储域名';
$key = $qiniupath."/".$filename;
$client = new Qiniu_MacHttpClient(null);
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
$upToken = $putPolicy->Token(null);
$putExtra = new Qiniu_PutExtra();
$s = time();
list($ret, $err) = Qiniu_PutFile($upToken, $key, $fullfilename, $putExtra);
//上传到七牛云存储end
注意:将里面的“云空间名”修改为刚刚创建的空间名称,“七牛云存储域名”替换为刚刚第一步里面复制的域名。
然后找到:
\''.$fileurl.'\'
替换成:
\''.$qiniudomain.$fileurl.'\'
还有,找到:
$dsql->ExecuteNoneQuery($inquery);
在他的
上面找到:
'".$activepath."/".$filename."'
改为:
'".$qiniudomain.$activepath."/".$filename."'
否则数据库中的记录还是本地的,别的文章插入图片的时候引用的就是错的。
至此,上传文章图片的时候保存和引用的就全是云存储上的图片了!
还有人想把多媒体和文件等附件也保存到七牛云上,以文件上传为例,需要修改的是select_soft.php和select_soft_post.php文件,改法相同,唯一不同的是在最后查找:
$dsql->ExecuteNoneQuery($inquery);
在他的
上面找的是:
'".$fullfileurl."'
改为:
'".$qiniudomain.$fullfileurl."'
多媒体文件修改的是select_media.php和select_media_post.php文件,没有media业务就没测试。
有人还想把文档的缩略图也保存到七牛上,缩略图因为牵扯到裁剪所以比文件复杂的多,需要修改的是以下文件。
打开/include/helpers/upload.helper.php文件,在里面找到下面这句代码:
$title = $filename.'.'.$file_sname;
在上面的“//保存信息到数据库”上面添加:
上传到七牛云存储start
require_once(dirname(__FILE__)."/../qiniu/io.php");
require_once(dirname(__FILE__)."/../qiniu/rs.php");
$qiniupath = substr($activepath,1);
$bucket = '云空间名';
$qiniudomain = '七牛云存储域名';
$key = preg_replace('/\//','',$fileurl,1);
$client = new Qiniu_MacHttpClient(null);
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
$upToken = $putPolicy->Token(null);
$putExtra = new Qiniu_PutExtra();
$s = time();
list($ret, $err) = Qiniu_PutFile($upToken, $key, $cfg_basedir.$fileurl, $putExtra);
//上传到七牛云存储end
注意:这段代码与图片上传部分是不一样的,因为二者的源码文件编写的不一样。
在这段后面查找:
$dsql->ExecuteNoneQuery($inquery);
在
靠近他的上面找的是:
'$fileurl'
改为:
'$qiniudomain"."$fileurl'
然后在/dede/imagecut.php中找到:
if( empty($isupload) )
在他的上面“//如果从其它图中剪出, 保存附件信息”的上面添加:
//上传到七牛云存储start by CMS资源网www.dedejs.com
require_once(dirname(__FILE__)."/../include/qiniu/io.php");
require_once(dirname(__FILE__)."/../include/qiniu/rs.php");
$qiniupath = substr($activepath,1);
$bucket = '云空间名';
$qiniudomain = '七牛云存储域名';
$key = preg_replace('/\//','',$ddpicok,1);;
$client = new Qiniu_MacHttpClient(null);
$putPolicy = new Qiniu_RS_PutPolicy("$bucket:$key");
$upToken = $putPolicy->Token(null);
$putExtra = new Qiniu_PutExtra();
$s = time();
list($ret, $err) = Qiniu_PutFile($upToken, $key, $ddpicokurl, $putExtra);
//上传到七牛云存储end
注意:这里又与upload.helper.php中的不一样,老老实实复制吧
然后在它的下面找到:
'$ddpicok','$ddpicok'
替换为:
'$ddpicok','$qiniudomain"."$ddpicok'
找到:
ReturnImg("<?php echo $ddpicok; ?>");
替换为:
ReturnImg("<?php echo $qiniudomain.$ddpicok; ?>");
这样才会返回云存储的图片地址到编辑框中。
总结:
以上方法实现了DEDECmsv5.7与七牛云存储的结合,实现了文章图,缩略图和其他文件的云存储,但有两个问题没有解决:1,本地还是会有,只能隔一段时间手动删除了,如果嫌占地方的话;2、缩略图使用原图时,返回的地址还是本地的,解决方法就是:裁剪一次全图吧。再有个小毛病就是数据库中记录的文件大小是未裁剪前的,目前没发现有什么影响。
附赠:
经过这些改动,会员头像部分你会发现也自动同步到七牛云存储上了,只是引用的时候还是本地,所以我们更改一下member/edit_face.php,找到:
"UPDATE `#@__member` SET `face` = '$face' WHERE mid='{$cfg_ml->M_ID}' "
替换为:
"UPDATE `#@__member` SET `face` = '$qiniudomain"."$face' WHERE mid='{$cfg_ml->M_ID}' "
好了,会员的头像都会显示云存储上的图片,并且更新的时候会自动替换掉。
至于会员上传文档图片的改动,因为没有开所以没有测试,应该是在upload.helper.php的下半部分代码中,自己试试吧