DEDEcms使用七牛云存储做图片附件服务器

灵感来源于: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的下半部分代码中,自己试试吧


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值