开发者社区> 问答> 正文

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

因为手里的一个程序员论坛(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 中新增以下内容:

$_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中的[font='Microsoft Yahei', '冬青黑体简体中文 w3', 宋体]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/%';


[font=Verdana, 'Microsoft YaHei', Tahoma, Simsun, sans-serif]意思是把discuz论坛帖子内容表中存贮内容的字段message中包含data/attachment替换为我们的http://img.bcxue.com/data/attachment云存储路径,用到了mysql的replace 字符替换函数

2.[font=Verdana, 'Microsoft YaHei', Tahoma, Simsun, sans-serif]修改门户文章 帖子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/ 随便打开一张图片,看效果,有不懂的可以继续跟帖



展开
收起
baker668 2016-01-19 18:37:22 33986 0
17 条回答
写回答
取消 提交回答
  • 官网附件下载不了 怎么办

    2020-06-25 17:46:16
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    discuz官方的两个附件都下载不了了,能不能 把文件分享一下?
    2018-10-15 22:09:42
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)

    -------------------------

    Rediscuz附件图片迁移阿里云OSS(完整版)
    请问这个是什么原因啊?
    2018-04-03 14:47:58
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    更换区域 要修改那些地什么
    @baker668
    2017-04-02 17:49:14
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    请问主题封面这样的图片是无法上传到 oss 上么?我测试是无限的.
    2017-02-22 13:40:45
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    谢谢教程,已经正常使用,不过只是PC版正常,手机触屏版发的贴子,图片还是存在本地,这个能解决吗?

    -------------------------

    Rediscuz附件图片迁移阿里云OSS(完整版)
    另外前面尝试失败的几位朋友,看一下是不是这个问题导致的

    /extend/vendor/storage/aliyun/sdk.class.php 第72行,默认用了杭州的OSS了!

    const DEFAULT_OSS_HOST = 'oss.aliyuncs.com';

    改成你们自己的OSS地址,再试一下

    -------------------------

    回 10楼设定成的帖子
    另外前面尝试失败的几位朋友,看一下是不是这个问题导致的

    /extend/vendor/storage/aliyun/sdk.class.php 第72行,默认用了杭州的OSS了!  

    const DEFAULT_OSS_HOST = 'oss.aliyuncs.com';  

    改成你们自己的OSS地址,再试一下

    -------------------------

    回 12楼瞧你没我美的帖子
    另外前面尝试失败的几位朋友,看一下是不是这个问题导致的

    /extend/vendor/storage/aliyun/sdk.class.php 第72行,默认用了杭州的OSS了!  

    const DEFAULT_OSS_HOST = 'oss.aliyuncs.com';  

    改成你们自己的OSS地址,再试一下

    -------------------------

    回 18楼装傻的帖子
    应该是只有阿里的ECS主机才能使用内网域名,其他家的主机只能使用外网域名访问
    2017-02-02 18:30:08
    赞同 展开评论 打赏
  • 回 楼主baker668的帖子
    大神,我到贵站看了你的图片地址,你设置的那个远程URL,对应的是OSS外网域名么?使用的是外网流量的么?使用内网域名访问会不会更好啊?

    -------------------------

    回 23楼养龟人的帖子
    嗯,已经实现上传和下载都走内网线路了,不过好卡,现在~因为我是图片站。。。
    2017-01-20 12:05:28
    赞同 展开评论 打赏
  • 回 14楼baker668的帖子
    你好,按照你的方法,新上传图片路径确实是oss地址,但是访问返回NoSuchKey,oss权限为公共读写,refer可以为空,请教一下可能是哪里出了问题?
    2017-01-12 16:05:52
    赞同 展开评论 打赏
  • 回 15楼baker668的帖子
    显示这个其他是按照你的说的操作的
    2017-01-09 15:47:50
    赞同 展开评论 打赏
  • 回 9楼颤抖的帖子
    你好,想请问下你的问题解决了没 啊?

    -------------------------

    Rediscuz附件图片迁移阿里云OSS(完整版)
    出现跟9楼小伙伴一样的结果啊,附件继续在本地,oss 也没有文件,有朋友明白原因不 啊,讨教中。
    2016-12-15 15:22:41
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    为什么我的图片能够上传到oss上,可是本地服务器却不能访问到图片呢
    2016-11-29 14:42:06
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)










    没有任何的作用呀?是我哪里设置错了?
    2016-06-10 09:48:11
    赞同 展开评论 打赏
  • Rediscuz附件图片迁移阿里云OSS(完整版)
    您好楼主。
    采用OOS的图片处理-样式管理。上传图片后如何在图片后缀名后自动加样式名称呢?

    -------------------------

    回 6楼baker668的帖子
    您好楼主。
    采用OOS的图片处理-样式管理。上传图片后如何在图片后缀名后自动加样式名称呢?
    2016-05-08 01:55:37
    赞同 展开评论 打赏
  • 回 5楼(shinenuaa) 的帖子
    官方新出的OSSFTP支持开机自启动,目前使用下来,非常的稳定,比改代码要方便可靠。
    2016-01-22 05:04:28
    赞同 展开评论 打赏
  • 回 3楼(baker668) 的帖子
    能说一下ossftp启动出什么问题了吗?
    2016-01-21 14:34:58
    赞同 展开评论 打赏
  • 阿里云论坛版主,QQ 1978638808
    回 1楼(baker668) 的帖子
    辛苦了。是编辑器的问题。
    如果楼主改了那么多代码实现的才是通过ftp长传的话。我的建议就是使用oss官方的方法。搭建一个oss的ftp服务器~

    -------------------------

    回 3楼(baker668) 的帖子
    辛苦了。支持技术帝。
    2016-01-19 19:31:25
    赞同 展开评论 打赏
  • 不知道是权限问题还是编辑框的问题,老出现font字体代码,懒得一个个去改了,大家凑合看吧,关键地方没影响

    -------------------------

    回 2楼(51干警网) 的帖子
    通过改造ftp也是很方便的,前7点就ok了,后面的大部分都是介绍怎么修改自己论坛帖子中出现的特殊img url,而且不用因为oss的ftp服务器启动不了出现问题,oss有各种办法,看个人所需啦

    -------------------------

    回 5楼(shinenuaa) 的帖子
    ossftp应该是阿里的官方出品,没研究过

    -------------------------

    回 13楼(瞧你没我美) 的帖子
    测试远程附件提示什么?根据提示的错误去调试,一般按照教程没问题的,我好几个站点都是这个测试成功的

    -------------------------

    回 10楼(设定成) 的帖子
    测试远程附件提示什么错误
    2016-01-19 18:42:23
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
阿里云云原生 Serverless 技术实践营 PPT 演讲 立即下载
阿里云产品十月刊 立即下载
基于阿里云构建博学谷平台实时湖仓 立即下载