大家好~我是
米洛
!
我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的教程
,希望大家多多支持。
欢迎关注我的公众号米洛的测开日记
,一起交流学习!
# 最后一次谈图床的事
上次咱不是说了gitee的图床失效了嘛,于是我发现我的使用文档很多图片都挂了,现在大概是这样:
各种图片都莫得了,于是我很懊恼,这问题必须得解决是不。但苦于这个工程比较浩大,所以我们得自己做点事情。
# 下载旧图片
我们知道之前的图片url都是https://xxx.com/xxx/日期/时间戳.png,那我们能不能把数据都下载下来,然后上传到新的oss呢?肯定是可以的,所以我们先做第一步: 下载老数据
好在gitee提供了下载功能,我们先下载历史图片的压缩包,大概700mb,也不算小了。
# 解压图片并上传
我们把zip解压,会发现它与gitee里面的目录结构长得一样,所以接下来我们要做的事情就是,按照2021-10-1/图片名称.png这样的形式传入oss。我们打开七牛云控制台:
新建picture文件夹,接着上传文件就可以啦!但事情并不是太简单,这个页面不支持选中文件夹
,所以于是贴心的我自己写了一个七牛云上传的脚本,这次选了go的客户端。
代码都放在下面了:
package main
import (
"context"
"fmt"
"github.com/qiniu/go-sdk/v7/auth/qbox"
"github.com/qiniu/go-sdk/v7/storage"
"io/fs"
"path/filepath"
"runtime"
"strings"
)
// 文件上传客户端
type client struct {
mac *qbox.Mac
bucket string
token string
}
// 上传成功后的响应体
type MyPutRet struct {
Key string
Hash string
Fsize int
Bucket string
Name string
}
// 初始化客户端,类似于__init__()
func NewClient(accessKey, secretKey, bucket string) *client {
putPolicy := storage.PutPolicy{
Scope: bucket,
}
mac := qbox.NewMac(accessKey, secretKey)
return &client{
mac: mac,
bucket: bucket,
token: putPolicy.UploadToken(mac),
}
}
// 上传文件
func (c *client) UploadFile(key, filePath string) error {
putPolicy := storage.PutPolicy{
Scope: c.bucket,
ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
}
upToken := putPolicy.UploadToken(c.mac)
cfg := storage.Config{}
formUploader := storage.NewFormUploader(&cfg)
ret := MyPutRet{}
putExtra := storage.PutExtra{
Params: map[string]string{
"x:name": "qiniuUpload",
},
}
err := formUploader.PutFile(context.Background(), &ret, upToken, key, filePath, &putExtra)
if err != nil {
return err
}
// 打印上传结果
fmt.Println(ret.Bucket, ret.Key, ret.Fsize, ret.Hash, ret.Name)
return nil
}
// 上传目录
func (c *client) UploadDirectory(fileDirectory string) {
filepath.WalkDir(fileDirectory, func(path string, d fs.DirEntry, err error) error {
if d.IsDir() {
return nil
}
// 这里的path是全路径,我们去掉当前文件夹目录,只拿到对应目录的文件
realPath := strings.TrimPrefix(path, fileDirectory)
// 如果是windows,我们需要把\替换成/
if runtime.GOOS == "windows" {
realPath = strings.Replace(realPath, "\\", "/", -1)
}
// 获取到的文件路径是空我们不处理
if realPath == "" {
return nil
}
// 由于我这里的根路径是picture,所以手动加上前缀
return c.UploadFile("picture/"+realPath, path)
})
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
具体的操作,都是依据七牛云的官方SDK文档来做的,本身我想把这个包搞到github给大家下载的,后来发现没啥必要,一锤子买卖,下次基本用不到了。注释我都写得很清楚了,差不多思路就是遍历对应的文件夹,然后挨个上传文件
了。
下面是go.mod,如果没用go module,那再GOPATH里面加入对应的库即可。
module qiniuUpload
go 1.18
require github.com/qiniu/go-sdk/v7 v7.11.1
require golang.org/x/sync v0.0.0-20201207232520-09787c993a3a // indirect
2
3
4
5
6
7
我们来看看效果:
全部传上来了!如果对go不熟悉的,也需要这段代码的,建议可以自己亲手写一下,写出来会给自己加点信心,没啥难度的,但是这时候你会发现编程的乐趣
。
# 替换文档的所有链接
ide的伟大之处,除了全局搜索,还有全局替换
呢!我找到自己的项目文档,开始CTRL+SHIFT+R,全局替换:
把gitee的地址通通换成七牛云的域名,嘿嘿。。待会静待页面恢复(装逼开始)
太给力了,我只能说舒服了
!!!