Skip to content

Commit 7dfa7ef

Browse files
authored
Merge branch 'master' into dev-2304-callback
2 parents 04a368c + dec10ed commit 7dfa7ef

19 files changed

+1399
-128
lines changed

CHANGELOG.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,23 @@
11
# ChangeLog - Aliyun OSS SDK for Go
22

3+
## 版本号:v2.2.9 日期:2023-08-25
4+
### 变更内容
5+
- 增加:support force path style option.
6+
- 增加:support context.Context option.
7+
- 修改:remove LifecycleFilterNot.Prefix omitempty attribute.
8+
9+
10+
## 版本号:v2.2.8 日期:2023-07-31
11+
### 变更内容
12+
- 增加:support EnvironmentVariableCredentialsProvider
13+
- 增加:support describe regions api.
14+
- 增加:support create bucket with server encryption parameters.
15+
- 增加:support referer black list.
16+
- 增加:support aysnc process object api.
17+
- 增加:support ObjectSizeGreaterThan and ObjectSizeLessThan in lifecycle rule.
18+
- 增加:add DeepColdArchive storage class.
19+
- 修复:fix bug.
20+
321
## 版本号:v2.2.7 日期:2023-03-23
422
### 变更内容
523
- 增加:support get info form EC & x-oss-err.

README-CN.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
> - 使用此SDK,用户可以方便地在任何应用、任何时间、任何地点上传,下载和管理数据。
1414
1515
## 版本
16-
> - Current version: v2.2.7
16+
> - Current version: v2.2.9
1717
1818
## 运行环境
1919
> - Go 1.5及以上。

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,14 @@
1313
> - With this SDK, you can upload, download and manage data on any app anytime and anywhere conveniently.
1414
1515
## Version
16-
> - Current version: v2.2.7
16+
> - Current version: v2.2.9
1717
1818
## Running Environment
1919
> - Go 1.5 or above.
2020
2121
## Installing
2222
### Install the SDK through GitHub
23-
> - Run the 'go get github.com/aliyun/aliyun-oss-go-sdk/oss' command to get the remote code package.
23+
> - Run the 'go get github.com/aliyun/aliyun-oss-go-sdk' command to get the remote code package.
2424
> - Use 'import "github.com/aliyun/aliyun-oss-go-sdk/oss"' in your code to introduce OSS Go SDK package.
2525
2626
## Getting Started

oss/bucket.go

Lines changed: 91 additions & 72 deletions
Large diffs are not rendered by default.

oss/bucket_test.go

Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package oss
22

33
import (
44
"bytes"
5+
"context"
56
"crypto/hmac"
67
"crypto/sha1"
78
"crypto/tls"
@@ -2279,6 +2280,182 @@ func (s *OssBucketSuite) TestGetConfig(c *C) {
22792280
c.Assert(bucket.GetConfig().IsEnableMD5, Equals, false)
22802281
}
22812282

2283+
func (s *OssBucketSuite) TestForcePathStyle(c *C) {
2284+
url, err := url.ParseRequestURI(endpoint)
2285+
client, err := New(endpoint, accessID, accessKey, ForcePathStyle(true))
2286+
c.Assert(err, IsNil)
2287+
2288+
_, err = client.GetBucketInfo(bucketName)
2289+
c.Assert(err, NotNil)
2290+
c.Assert(err.(ServiceError).Code, Equals, "SecondLevelDomainForbidden")
2291+
c.Assert(err.(ServiceError).HostID, Equals, url.Host)
2292+
2293+
bucket, err := client.Bucket(bucketName)
2294+
c.Assert(err, IsNil)
2295+
2296+
c.Assert(bucket.GetConfig().IsPathStyle, Equals, true)
2297+
2298+
objectName := "demo.txt"
2299+
2300+
err = bucket.PutObject(objectName, strings.NewReader("hi oss"))
2301+
c.Assert(err, NotNil)
2302+
c.Assert(err.(ServiceError).Code, Equals, "SecondLevelDomainForbidden")
2303+
2304+
str, err := bucket.SignURL(objectName, HTTPPut, 3600)
2305+
c.Assert(err, IsNil)
2306+
strUrl := endpoint + "/" + bucketName + "/" + objectName
2307+
c.Assert(strings.Contains(str, strUrl), Equals, true)
2308+
}
2309+
2310+
func (s *OssBucketSuite) TestUseCname(c *C) {
2311+
url, err := url.ParseRequestURI(endpoint)
2312+
c.Assert(err, IsNil)
2313+
cnameEndpoint := bucketName + "." + url.Host
2314+
client, err := New(cnameEndpoint, accessID, accessKey, UseCname(true))
2315+
c.Assert(err, IsNil)
2316+
2317+
info, err := client.GetBucketInfo(bucketName)
2318+
2319+
c.Assert(err, IsNil)
2320+
c.Assert(info.BucketInfo.Name, Equals, bucketName)
2321+
2322+
client, err = New(cnameEndpoint, accessID, accessKey)
2323+
_, err = client.GetBucketInfo(bucketName)
2324+
c.Assert(err, NotNil)
2325+
c.Assert(err.(ServiceError).HostID, Equals, bucketName+"."+cnameEndpoint)
2326+
}
2327+
2328+
func (s *OssBucketSuite) TestContextTimeout(c *C) {
2329+
client, err := New(endpoint, accessID, accessKey)
2330+
c.Assert(err, IsNil)
2331+
2332+
bucket, err := client.Bucket(bucketName)
2333+
c.Assert(err, IsNil)
2334+
2335+
objectName := objectNamePrefix + RandStr(8)
2336+
objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"
2337+
2338+
bucketNameDest := bucketNamePrefix + RandLowStr(8)
2339+
c.Assert(err, IsNil)
2340+
2341+
objectNameDest := objectName + RandLowStr(5)
2342+
2343+
// Put
2344+
ctx := context.Background()
2345+
ctx, cancel := context.WithTimeout(ctx, 1*time.Nanosecond)
2346+
defer cancel()
2347+
err = bucket.PutObject(objectName, strings.NewReader(objectValue), WithContext(ctx))
2348+
c.Assert(err, NotNil)
2349+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2350+
2351+
// Get not exist object
2352+
_, err = bucket.GetObject(objectName)
2353+
c.Assert(err, NotNil)
2354+
c.Assert(err.(ServiceError).StatusCode, Equals, 404)
2355+
2356+
err = s.bucket.PutObject(objectName, strings.NewReader(objectValue))
2357+
c.Assert(err, IsNil)
2358+
2359+
// Get
2360+
_, err = bucket.GetObject(objectName, WithContext(ctx))
2361+
c.Assert(err, NotNil)
2362+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2363+
2364+
// CopyObjectTo
2365+
_, err = bucket.CopyObjectTo(bucketNameDest, objectNameDest, objectName, WithContext(ctx))
2366+
c.Assert(err, NotNil)
2367+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2368+
// Delete
2369+
err = s.bucket.DeleteObject(objectName)
2370+
c.Assert(err, IsNil)
2371+
2372+
var nextPos int64
2373+
// String append
2374+
nextPos, err = s.bucket.AppendObject(objectName, strings.NewReader("红藕香残玉簟秋。轻解罗裳,独上兰舟。"), nextPos, WithContext(ctx))
2375+
c.Assert(err, NotNil)
2376+
2377+
// Put with URL
2378+
signedURL, err := bucket.SignURL(objectName, HTTPPut, 3600)
2379+
c.Assert(err, IsNil)
2380+
2381+
err = bucket.PutObjectWithURL(signedURL, strings.NewReader(objectValue), WithContext(ctx))
2382+
c.Assert(err, NotNil)
2383+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2384+
2385+
// Get not exist object
2386+
_, err = bucket.GetObject(objectName)
2387+
c.Assert(err, NotNil)
2388+
c.Assert(err.(ServiceError).StatusCode, Equals, 404)
2389+
2390+
err = s.bucket.PutObject(objectName, strings.NewReader(objectValue))
2391+
c.Assert(err, IsNil)
2392+
2393+
// Get with URL
2394+
signedURL, err = bucket.SignURL(objectName, HTTPGet, 3600)
2395+
c.Assert(err, IsNil)
2396+
2397+
_, err = bucket.GetObjectWithURL(signedURL, WithContext(ctx))
2398+
c.Assert(err, NotNil)
2399+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2400+
2401+
err = s.bucket.DeleteObject(objectName)
2402+
c.Assert(err, IsNil)
2403+
2404+
content := RandStr(1024 * 1024)
2405+
var fileName = "test-file-" + RandStr(8)
2406+
CreateFile(fileName, content, c)
2407+
2408+
fd, err := os.Open(fileName)
2409+
c.Assert(err, IsNil)
2410+
defer fd.Close()
2411+
2412+
err = bucket.PutObjectFromFile(objectName, fileName, WithContext(ctx))
2413+
c.Assert(err, NotNil)
2414+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2415+
2416+
os.Remove(fileName)
2417+
}
2418+
2419+
func (s *OssBucketSuite) TestContextTimeoutBigFile(c *C) {
2420+
client, err := New(endpoint, accessID, accessKey)
2421+
c.Assert(err, IsNil)
2422+
2423+
bucket, err := client.Bucket(bucketName)
2424+
c.Assert(err, IsNil)
2425+
2426+
objectName := objectNamePrefix + RandStr(8)
2427+
2428+
//big file
2429+
content := RandStr(5 * 1024 * 1024)
2430+
var fileName = "test-file-" + RandStr(8)
2431+
CreateFile(fileName, content, c)
2432+
2433+
fd, err := os.Open(fileName)
2434+
c.Assert(err, IsNil)
2435+
defer fd.Close()
2436+
2437+
ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
2438+
defer cancel()
2439+
objectNameBigfile := objectName + "-bigfile"
2440+
err = bucket.PutObjectFromFile(objectNameBigfile, fileName, WithContext(ctx))
2441+
if ctx != nil {
2442+
select {
2443+
case <-ctx.Done():
2444+
c.Assert(err, NotNil)
2445+
c.Assert(strings.Contains(err.Error(), "context deadline exceeded"), Equals, true)
2446+
default:
2447+
c.Fail()
2448+
}
2449+
}
2450+
2451+
// Get not exist object
2452+
_, err = bucket.GetObject(objectNameBigfile)
2453+
c.Assert(err, NotNil)
2454+
c.Assert(err.(ServiceError).StatusCode, Equals, 404)
2455+
2456+
os.Remove(fileName)
2457+
}
2458+
22822459
func (s *OssBucketSuite) TestSTSToken(c *C) {
22832460
objectName := objectNamePrefix + RandStr(8)
22842461
objectValue := "红藕香残玉簟秋。轻解罗裳,独上兰舟。云中谁寄锦书来?雁字回时,月满西楼。"
@@ -2648,6 +2825,37 @@ func (s *OssBucketSuite) TestProcessObject(c *C) {
26482825
c.Assert(err, NotNil)
26492826
}
26502827

2828+
// TestAsyncProcessObject
2829+
func (s *OssBucketSuite) TestAsyncProcessObject(c *C) {
2830+
videoUrl := "https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/video.mp4?spm=a2c4g.64555.0.0.515675979u4B8w&file=video.mp4"
2831+
fileName := "video.mp4"
2832+
// 发起get请求
2833+
resp, err := http.Get(videoUrl)
2834+
c.Assert(err, IsNil)
2835+
defer resp.Body.Close()
2836+
2837+
// 创建文件
2838+
file, err := os.Create(fileName)
2839+
c.Assert(err, IsNil)
2840+
defer file.Close()
2841+
_, err = io.Copy(file, resp.Body)
2842+
c.Assert(err, IsNil)
2843+
2844+
err = s.bucket.PutObjectFromFile("demo.avi", fileName)
2845+
c.Assert(err, IsNil)
2846+
2847+
sourceImageName := "demo.avi"
2848+
style := "video/convert,f_avi,vcodec_h265,s_1920x1080,vb_2000000,fps_30,acodec_aac,ab_100000,sn_1"
2849+
targetObject := "demo"
2850+
process := fmt.Sprintf("%s|sys/saveas,b_%v,o_%v", style, strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(bucketName)), "="), strings.TrimRight(base64.URLEncoding.EncodeToString([]byte(targetObject)), "="))
2851+
_, err = s.bucket.AsyncProcessObject(sourceImageName, process)
2852+
c.Assert(err, NotNil)
2853+
c.Assert(err.(ServiceError).Code, Equals, "Imm Client")
2854+
c.Assert(strings.Contains(err.(ServiceError).Message, "ResourceNotFound, The specified resource Attachment is not found"), Equals, true)
2855+
2856+
os.Remove(fileName)
2857+
}
2858+
26512859
// Private
26522860
func CreateFileAndWrite(fileName string, data []byte) error {
26532861
os.Remove(fileName)

0 commit comments

Comments
 (0)