设为首页收藏本站

IITT网络服务中心

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2480|回复: 0
打印 上一主题 下一主题

[教程]discuz附件图片迁移阿里云OSS(完整版)

[复制链接]

453

主题

399

帖子

1764

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1764
跳转到指定楼层
楼主
发表于 2016-12-8 03:54:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
因为手里的一个程序员论坛(http://bbs.it-home.org/) 经常出现IO问题,所以有了迁移discuz图片的想法


discuz附件图片迁移阿里云OSS,该方法也适用于七牛、又拍云


该方法是用discuz官方提供的扩展接口来实现的
DiscuzX使用云存储原理:通过改造ftp类,当附件上传到本地时再通过ftp类将附件上传到云存储上。


下面使用阿里云存储做discuz远程附件的操作步骤:


1、确认您使用的discuz版本;


2.   开通云存储,新建bucket(公共读),这个步骤就不多说了,完全傻瓜式操作;


3、备份 source/class/class_core.php 和 config/config_global.php 两个文件;


4、根据您的discuz论坛版本下载对应的 DISCUZX2.5/X3扩展框架DXEXTEND(下载:http://www.discuz.net/thread-3334048-1-1.html)另外,x3.1适用于x3.2,将解压出来的source/class/class_core.php覆盖discuz目录下该文件;


5、下载DISCUZX2.5/3/3.1云存储通用接口(下载:http://www.discuz.net/thread-3399569-1-1.html)将extend目录文件上传到discuz的根目录,如有提示覆盖即可;

6、在config/config_global.php 中新增以下内容:

[url=]复制代码[/url]
  • $_config['extend']['storage']['curstorage'] = 'aliyun';//云接口,一旦确认,不可再改
  • $_config['extend']['storage']['aliyun']['access_id'] = 'xxx'; //你的Access Key ID
  • $_config['extend']['storage']['aliyun']['access_key'] = 'xxx'; //你的Access Key Secret
  • $_config['extend']['storage']['aliyun']['access_host'] = NULL;//默认即可
  • $_config['extend']['storage']['aliyun']['bucket'] = 'ithome';//你的bucket名字
  • $_config['extend']['storage']['aliyun']['attachurl'] = 'http://img.it-home.org';//访问域名,可以在oss后台设置自定义域名



7、在discuz 后台--全局--上传设置--远程附件--启用远程附件:是,并将 远程访问 URL 设置为 http://<YOUR QINIU DOMAIN>也就是6中的attachurl,其他的都不用修改。






这样就修改完成了,去论坛上传附件发帖试试吧,再看看你的附件地址是不是已经是云存储的地址了


上面只是把我们新的图片上传到我们的云存储,但我们之前的图片怎么办?接着继续说明 discuz本地图片附件搬家迁移阿里云oss


1. 上传data/attachment下面的文件夹到你己阿里云oss的bucket目录下(可以临时升级一下阿里云的带宽为10M也就几块钱一天,把源程序下面的图片下载下来)


2.完成步骤1操作后需要转换数据库的本地附件的数据为远程附件数据

涉及到的数据库表:

引用
pre_forum_attachment
pre_home_pic
pre_portal_article_title
pre_portal_attachment
pre_portal_topic_pic




在后台--站长--数据库--升级--分别执行如下代码

1、pre_forum_attachment

引用
update pre_forum_attachment_0 set remote = '1';
update pre_forum_attachment_1 set remote = '1';
update pre_forum_attachment_2 set remote = '1';
update pre_forum_attachment_3 set remote = '1';
update pre_forum_attachment_4 set remote = '1';
update pre_forum_attachment_5 set remote = '1';
update pre_forum_attachment_6 set remote = '1';
update pre_forum_attachment_7 set remote = '1';
update pre_forum_attachment_8 set remote = '1';
update pre_forum_attachment_9 set remote = '1';



2、pre_portal_article_title,pre_portal_attachment,pre_portal_topic_pic

引用
update pre_portal_article_title set remote=1;
update pre_portal_attachment set remote=1;
update pre_portal_topic_pic set remote=1;



3、由于相册表中的remote取值还有一种情况为remote=2(论坛附件图片保存到相册)pre_home_pic,执行语句:

引用
update pre_home_pic set remote=remote+1;



按照以上操作后,打开网站附件--属性看看是否已经在远程地址上了,大功告成。

PS:由于某些原因我们帖子和门户文章图片路径是写死的,诸如采集的时候很多人图方便都是直接写死img src的,接下来介绍如何修改论坛帖子和门户文章里面的img url路径为我们的云存储
1.修改修改论坛帖子img url(将字段帖子表内容字段message中的data/attachment替换为http://img.bcxue.com/data/attachment)这种格式的
引用
UPDATE `pre_forum_post` SET `message` = replace(message, 'data/attachment', 'http://img.bcxue.com/data/attachment')  WHERE  `message` LIKE '%data/attachment/%';


意思是把discuz论坛帖子内容表中存贮内容的字段message中包含data/attachment替换为我们的http://img.bcxue.com/data/attachment云存储路径,用到了mysql的replace 字符替换函数

2.修改门户文章帖子img url


引用
UPDATE `pre_portal_article_content` SET `content` = replace(content, 'data/attachment', 'http://img.it-home.org') WHERE `content` LIKE '%data/attachment/%';


好了,通过以上几点就完成了discuz 图片附件迁移阿里云oss的全部过程了。

具体可以去http://bbs.it-home.org/ 随便打开一张图片,看效果,有不懂的可以继续跟帖

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|IITT网络服务中心    

GMT+8, 2024-5-3 05:04 , Processed in 0.075997 second(s), 28 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表