业务需求上经常存在需要对同一个文件进行双上传,上传到不同云存储桶,以防出现某一个云厂商因各种意外导致自身服务出现不可用的情况,当然,还有其他措施可以避免,现在只针对通过程序业务代码而双写存储的这个场景。
业务场景
文件A上传到oss a,同时也需要将这个文件A异步上传到oss b,而文件A在主协程会被remove。
下面有份伪代码去描述这个场景
func ABC() {
file, err := os.Open(path)
if err != nil {
return
}
defer func() {
file.Close()
os.Remove(path)
}()
...
// 上传到oss a
upload2OssA(file)
...
// TODO 异步上传到oss b
}
我们可以看到主routine打开了一个文件,并且上传到oss a,程序结束后会close文件且remove文件了,现在希望对这个文件异步上传到oss b
方式一
将文件内容读取出来上传
func ABC() {
file, err := os.Open(path)
if err != nil {
return
}
defer func() {
file.Close()
os.Remove(path)
}()
...
// 上传到oss a
upload2OssA(file)
...
// TODO 异步上传到oss b
method1(file