142 lines
2.9 KiB
Go
142 lines
2.9 KiB
Go
package minio
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/stretchr/testify/require"
|
|
"gitlab.33.cn/chat/dtalk/pkg/oss"
|
|
"math"
|
|
"os"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
/*
|
|
[[Oss]]
|
|
AppId = "dtalk"
|
|
OssType = "minio"
|
|
RegionId = ""
|
|
AccessKeyId = "XYI4T3QIT8YQQLRHA0YV"
|
|
AccessKeySecret = "FqgvB3CzsBK5xwEphEC6i4Y6dTkWAjyfQ9TS1kLZ"
|
|
Role = ""
|
|
Policy = ""
|
|
DurationSeconds = 3600
|
|
Bucket = "dtalk-test"
|
|
EndPoint = "127.0.0.1:9000"
|
|
*/
|
|
|
|
var (
|
|
minioConfig = &oss.Config{
|
|
RegionId: "",
|
|
AccessKeyId: "XYI4T3QIT8YQQLRHA0YV",
|
|
AccessKeySecret: "FqgvB3CzsBK5xwEphEC6i4Y6dTkWAjyfQ9TS1kLZ",
|
|
Role: "",
|
|
Policy: "",
|
|
DurationSeconds: 3600,
|
|
Bucket: "dtalk-test",
|
|
EndPoint: "127.0.0.1:9000",
|
|
}
|
|
smFilePath = "/Users/cccccccccchy/Downloads/oa.sql"
|
|
bgFilePath = "/Users/cccccccccchy/Downloads/movie_bg.mp4"
|
|
OssMinio = &Minio{}
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
OssMinio = New(minioConfig)
|
|
os.Exit(m.Run())
|
|
}
|
|
|
|
func TestMinio_Upload_sm(t *testing.T) {
|
|
file, err := os.OpenFile(smFilePath, os.O_RDONLY, os.ModePerm)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fileStat, err := file.Stat()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
url, _, err := OssMinio.Upload("test_smFile.gif", file, fileStat.Size())
|
|
require.NoError(t, err)
|
|
t.Log(url)
|
|
}
|
|
|
|
func TestMinio_Upload_bg(t *testing.T) {
|
|
file, err := os.OpenFile(bgFilePath, os.O_RDONLY, os.ModePerm)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fileStat, err := file.Stat()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
url, _, err := OssMinio.Upload("test_movie_bg.mp4", file, fileStat.Size())
|
|
require.NoError(t, err)
|
|
t.Log(url)
|
|
}
|
|
|
|
func TestMinio_Multipart_bg(t *testing.T) {
|
|
file, err := os.OpenFile(smFilePath, os.O_RDONLY, os.ModePerm)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
fileStat, err := file.Stat()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
var chunkSize int64 = 1024 * 1024 * 5
|
|
var num int64
|
|
var key string = "oa.sql"
|
|
var uploadId string
|
|
var parts []oss.Part
|
|
|
|
uploadId, err = OssMinio.InitiateMultipartUpload(key)
|
|
require.NoError(t, err)
|
|
|
|
num = int64(math.Ceil(float64(fileStat.Size()) / float64(chunkSize)))
|
|
|
|
// 执行并发上传段
|
|
partChan := make(chan oss.Part, num)
|
|
var i int64 = 0
|
|
for ; i < num; i++ {
|
|
go func(i int64) {
|
|
b := make([]byte, chunkSize)
|
|
_, _ = file.Seek(i*(chunkSize), 0)
|
|
if len(b) > int(fileStat.Size()-i*chunkSize) {
|
|
b = make([]byte, fileStat.Size()-i*chunkSize)
|
|
}
|
|
|
|
file.Read(b)
|
|
r := bytes.NewReader(b)
|
|
etag, err := OssMinio.UploadPart(key, uploadId, r, int32(i+1), 0, int64(len(b)))
|
|
require.NoError(t, err)
|
|
partChan <- oss.Part{
|
|
ETag: etag,
|
|
PartNumber: int32(i + 1),
|
|
}
|
|
|
|
t.Log("partNumber", i+1, "len", len(b))
|
|
|
|
}(i)
|
|
}
|
|
|
|
parts = make([]oss.Part, 0, num)
|
|
// 等待上传完成
|
|
for {
|
|
part, ok := <-partChan
|
|
if !ok {
|
|
break
|
|
}
|
|
parts = append(parts, part)
|
|
|
|
if len(parts) == int(num) {
|
|
close(partChan)
|
|
}
|
|
}
|
|
|
|
sort.Sort(oss.Parts(parts))
|
|
|
|
url, _, err := OssMinio.CompleteMultipartUpload(key, uploadId, parts)
|
|
require.NoError(t, err)
|
|
t.Log(url)
|
|
}
|