将七牛附件搬迁到本地(附自动修改路径插件)

2018/11/05 21:56 于 快速上手 3

由于近期七牛云存储开始回收测试域名( https://segmentfault.com/q/1010000015811678 ),在测试域名被回收后,原先用这个域名上传并发布的日志中的图片将无法显示。暂且不评论七牛此举是否得当,但这么多的附件要重新上传,再一篇篇更新日志,显然给我们造成了巨大的困扰。

为此,本文提供了迁移附件的指南,供有同样问题的用户参考。

迁移需要用到的工具,请先下载:
qshell 命令行工具: https://developer.qiniu.com/kodo/tools/1302/qshell
bW Qiniu Fixer新旧附件路径替换插件:https://www.bo-blog.com/bw/storage/fcaa0297.zip

操作步骤:

(以下假设被回收了域名的七牛空间名为 client,在同一区域下新建的空间名为 test4,请自行替换)

0) 解压qshell,请阅读qshell下载页的说明,选择适合您的系统的可执行文件。

1) 在旧空间(本例中名为client)的同一区,新建一个新的bucket(本例为test4)。注意,七牛会为这个新空间分配一个新的测试域名,本例假设测试域名为 php12345.bkt.clouddn.com。

2) 在终端中执行:

qshell account AK SK

其中,AK和SK分别是您的七牛秘钥的Access Key和Secret Key。

3) 继续执行

qshell listbucket client allfiles.txt

在qshell同一文件夹下将产生一个allfiles.txt,内含所有该空间下的文件名和文件详情。

4) 继续执行

cat allfiles.txt | awk '{print $1}' >allfiles2.txt 

用awk获取列表结果的第一列,存于allfiles2.txt文件中。

5) 继续执行

qshell batchcopy -force client test4 allfiles2.txt

该命令会批量把旧空间client的文件复制到新空间test4里。

6) 现在,我们需要将所有文件从新的空间下载到PC本机。
在qshell同一文件夹下,新建一纯文本文件名为 config.conf。
该文件中,输入下列内容:

{
    "dest_dir"   :   "/Users/mymac/Documents/backup",
    "bucket"     :   "test4",
    "prefix"     :   "",
    "suffixes"   :   "",
    "cdn_domain" :   "php12345.bkt.clouddn.com",
    "referer"    :   "http://php12345.bkt.clouddn.com",
    "log_file"   :   "/Users/mymac/Downloads/download.log",
    "log_level"  :   "info",
    "log_rotate" :   1,
    "log_stdout" :   false
}

请注意,dest_dir替换为想要备份到本机的路径。bucket输入新空间名。cdn_domain和referer请填写新分配的测试域名。log_info里填一个Log文件的存放路径。

保存该文件后,请在终端继续执行:

qshell qdownload config.conf

等待所有文件下载到本机backup文件夹下。

7) 现在可以关闭终端。
我们将下载下来的 backup/storage 目录下的全部文件,用FTP等手段上传到bW博客的storage/ 目录下。
至此,文件迁移完成。

8) 现在,还需要最后一步,也就是一次性替换旧的文件路径为 bW的本地路径,不然图片依然是无法显示的。

请解压先前下载的插件,打开 qiniufixer/domain.php 文件。

<?php
define ('OLD_QINIU_DOMAIN', 'client.qiniudn.com');
define ('NEW_QINIU_DOMAIN', 'www.myblog.com');

第2行引号中是旧的bucket访问域名和路径。第三行是bW的真实域名和路径。在这个例子里,迁移后的附件访问地址为 www.myblog.com/storage/xxxx.jpg。

如果你的bW有启用https,那么可以这样写:

<?php
define ('OLD_QINIU_DOMAIN', 'http://client.qiniudn.com/storage');
define ('NEW_QINIU_DOMAIN', 'https://www.myblog.com/storage');

9) 将整个 qiniufixer 文件夹上传到 bW的安装目录的 extension 目录下。注意只能有一层qiniufixer文件夹。某些解压软件会将文件解压成 xxxxx/qiniufixer/,请仅上传第二层。

然后,在浏览器内登录bW后台,到“插件扩展”里,点击“手动载入”按钮,填写目录名 qiniufixer,点击“安装”。然后启用该扩展。

恭喜,您已完成了紧急抢救旧空间文件、备份到本机、迁移到本地,并顺便更新了已发布的日志。

参考链接
https://segmentfault.com/q/1010000016887800?utm_source=tag-newest

后话
七牛此举也许是受到了监管未备案域名的压力。但测试域名被回收后,原先上传的文件不仅不能公开显示,而且无法导出(无论是qshell,还是在那个难用至极的portal后台里都不能直接下载),这样对待用户实在太难看。我们这些轻应用自己迁移一下,写个hotfix也许不是大事,但那些存放了海量文件、系统不易修改的用户呢?不管怎么说,我们要记住一点:勤备份,把数据掌握在自己手中。

七牛教程

发表评论
已登录为 [退出]


User
山隈
2018/11/10 18:21
好像挺复杂的,我头疼了。
User
kiyu
2018/11/06 19:56
等了好久拉,今天偶然想起竟然还在更新
User
Bo-blog
2018/11/06 00:03
鉴于七牛云储存对新用户不再友好,下一版起,bW将移除内置的七牛云存储,改用插件形式发布这个功能。