一、 go環(huán)境安裝
根據(jù)阿里云oss sdk go版的安裝文檔,如下
https://help.aliyun.com/document_detail/87712.html?spm=a2c4g.11186623.6.918.234b4c07Vjvm94
#!/bin/bash
# 安裝go
myhome=`pwd`
export GOROOT=${myhome}/go
export PATH=$PATH:${GOROOT}/bin
wget -q http://xxxxxxx/video_tmp_test/go1.13.7.linux-amd64.tar.gz
tar -xzf go1.13.7.linux-amd64.tar.gz
go version
# 解決go被墻的問題
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
# 安裝阿里云oss模塊
go get -v github.com/aliyun/aliyun-oss-go-sdk/oss
# clone
git clone git@gitlab.alibaba-inc.com:aligame-qa/smallTools.git
mv smallTools/oss/kuaijianUploadOss.go ./
# 編譯
go build kuaijianUploadOss.go
# 上傳
#./kuaijianUploadOss
#測試用
#./kuaijianUploadOss -b debug -c armeabi-v7a -v 1.5.7 -f /Users/lijingle/Downloads/armeabi-v7a-libvideorecsdkloader.so
二、具體實(shí)現(xiàn)
package main
import (
"flag"
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func HandleMsg(msg string) {
fmt.Println(msg)
os.Exit(-1)
}
func listDir(bucket *oss.Bucket, prefix string) {
lsRes, err := bucket.ListObjects(oss.Prefix(prefix))
if err != nil {
HandleError(err)
}
for _, object := range lsRes.Objects {
fmt.Println(" ", object.Key)
}
}
func IsFileExists(bucket *oss.Bucket, fname string) (rslt bool) {
// 判斷文件是否存在
isExist, err := bucket.IsObjectExist(fname)
if err != nil {
HandleError(err)
}
return isExist
}
var localFile = flag.String("f", "", "本地文件")
func main() {
fmt.Println("OSS Go SDK Version: ", oss.Version)
flag.Parse()
// 參數(shù)檢查
if *localFile == "" {
HandleMsg("參數(shù)檢查錯誤: 文件名不能為空")
}
// 創(chuàng)建OSSClient實(shí)例。
client, err := oss.New("oss-cn-shanghai.aliyuncs.com", "<youaccesskey>", "<youaccesssecurity>")
if err != nil {
HandleError(err)
}
bucketName := "<youbucketname>"
remotePath := fmt.Sprintf("video_tmp_test/%s/", "dir1")
remoteFile := remotePath + "after_upload_file.txt"
// 獲取存儲空間。
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
isExist := IsFileExists(bucket, remoteFile)
fmt.Println("===================判斷文件是否存在===================")
fmt.Printf("IsFileExists=%v\n", isExist)
fmt.Println("===================上傳前文件夾情況:===================")
listDir(bucket, remotePath)
fmt.Println("===================開始上傳so文件===================")
// 上傳本地文件。
err = bucket.PutObjectFromFile(remoteFile, *localFile)
if err != nil {
HandleError(err)
}
fmt.Println("===================上傳后文件夾情況:===================")
listDir(bucket, remotePath)
}