@@ -123,6 +123,7 @@ type PresignedURLOptions struct {
123123 SignMerged bool `xml:"-" url:"-" header:"-"`
124124 AuthTime * AuthTime `xml:"-" url:"-" header:"-"`
125125 EncodeDelimiter bool `xml:"-" url:"-" header:"-"`
126+ EnablePathMerge bool `xml:"-" url:"-" header:"-"`
126127}
127128
128129// GetPresignedURL get the object presigned to down or upload file by url
@@ -146,6 +147,7 @@ func (s *ObjectService) GetPresignedURL(ctx context.Context, httpMethod, name, a
146147 optHeader : opt ,
147148 }
148149 var authTime * AuthTime
150+ var enablePathMerge bool
149151 if opt != nil {
150152 if popt , ok := opt .(* presignedURLTestingOptions ); ok {
151153 authTime = popt .authTime
@@ -160,9 +162,12 @@ func (s *ObjectService) GetPresignedURL(ctx context.Context, httpMethod, name, a
160162 if popt .AuthTime != nil {
161163 authTime = popt .AuthTime
162164 }
165+ if popt .EnablePathMerge {
166+ enablePathMerge = true
167+ }
163168 }
164169 }
165- req , err := s .client .newPresignedRequest (ctx , & sendOpt )
170+ req , err := s .client .newPresignedRequest (ctx , & sendOpt , enablePathMerge )
166171 if err != nil {
167172 return nil , err
168173 }
@@ -220,6 +225,7 @@ func (s *ObjectService) GetPresignedURL2(ctx context.Context, httpMethod, name s
220225 optQuery : opt ,
221226 optHeader : opt ,
222227 }
228+ var enablePathMerge bool
223229 var authTime * AuthTime
224230 mark := "?"
225231 if opt != nil {
@@ -237,13 +243,16 @@ func (s *ObjectService) GetPresignedURL2(ctx context.Context, httpMethod, name s
237243 if popt .AuthTime != nil {
238244 authTime = popt .AuthTime
239245 }
246+ if popt .EnablePathMerge {
247+ enablePathMerge = true
248+ }
240249 }
241250 }
242251 if cred .SessionToken != "" {
243252 sendOpt .uri = fmt .Sprintf ("%s%s%s" , sendOpt .uri , mark , url.Values {"x-cos-security-token" : []string {cred .SessionToken }}.Encode ())
244253 }
245254
246- req , err := s .client .newPresignedRequest (ctx , & sendOpt )
255+ req , err := s .client .newPresignedRequest (ctx , & sendOpt , enablePathMerge )
247256 if err != nil {
248257 return nil , err
249258 }
@@ -306,6 +315,7 @@ func (s *ObjectService) GetPresignedURL3(ctx context.Context, httpMethod, name s
306315 optQuery : opt ,
307316 optHeader : opt ,
308317 }
318+ var enablePathMerge bool
309319 var authTime * AuthTime
310320 mark := "?"
311321 if opt != nil {
@@ -323,13 +333,16 @@ func (s *ObjectService) GetPresignedURL3(ctx context.Context, httpMethod, name s
323333 if popt .AuthTime != nil {
324334 authTime = popt .AuthTime
325335 }
336+ if popt .EnablePathMerge {
337+ enablePathMerge = true
338+ }
326339 }
327340 }
328341 if cred .SessionToken != "" {
329342 sendOpt .uri = fmt .Sprintf ("%s%s%s" , sendOpt .uri , mark , url.Values {"x-cos-security-token" : []string {cred .SessionToken }}.Encode ())
330343 }
331344
332- req , err := s .client .newPresignedRequest (ctx , & sendOpt )
345+ req , err := s .client .newPresignedRequest (ctx , & sendOpt , enablePathMerge )
333346 if err != nil {
334347 return nil , err
335348 }
@@ -382,7 +395,7 @@ func (s *ObjectService) GetSignature(ctx context.Context, httpMethod, name, ak,
382395 sendOpt .uri = fmt .Sprintf ("%s?%s" , sendOpt .uri , qs )
383396 }
384397 }
385- req , err := s .client .newPresignedRequest (ctx , & sendOpt )
398+ req , err := s .client .newPresignedRequest (ctx , & sendOpt , false )
386399 if err != nil {
387400 return ""
388401 }
0 commit comments