mirror of
https://gitee.com/juicedata/JuiceFS.git
synced 2025-12-06 09:39:14 +08:00
decode based on the encoding type returned by the server (#6532)
This commit is contained in:
@@ -193,7 +193,7 @@ func (s *ibmcos) List(ctx context.Context, prefix, start, token, delimiter strin
|
||||
objs := make([]Object, n)
|
||||
for i := 0; i < n; i++ {
|
||||
o := resp.Contents[i]
|
||||
oKey, err := url.QueryUnescape(*o.Key)
|
||||
oKey, err := decodeKey(*o.Key, resp.EncodingType)
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode key %s", *o.Key)
|
||||
}
|
||||
@@ -201,7 +201,7 @@ func (s *ibmcos) List(ctx context.Context, prefix, start, token, delimiter strin
|
||||
}
|
||||
if delimiter != "" {
|
||||
for _, p := range resp.CommonPrefixes {
|
||||
prefix, err := url.QueryUnescape(*p.Prefix)
|
||||
prefix, err := decodeKey(*p.Prefix, resp.EncodingType)
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode commonPrefixes %s", *p.Prefix)
|
||||
}
|
||||
|
||||
@@ -199,7 +199,7 @@ func (s *ks3) List(ctx context.Context, prefix, start, token, delimiter string,
|
||||
objs := make([]Object, n)
|
||||
for i := 0; i < n; i++ {
|
||||
o := resp.Contents[i]
|
||||
oKey, err := url.QueryUnescape(*o.Key)
|
||||
oKey, err := decodeKey(*o.Key, resp.EncodingType)
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode key %s", *o.Key)
|
||||
}
|
||||
@@ -207,7 +207,7 @@ func (s *ks3) List(ctx context.Context, prefix, start, token, delimiter string,
|
||||
}
|
||||
if delimiter != "" {
|
||||
for _, p := range resp.CommonPrefixes {
|
||||
prefix, err := url.QueryUnescape(*p.Prefix)
|
||||
prefix, err := decodeKey(*p.Prefix, resp.EncodingType)
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode commonPrefixes %s", *p.Prefix)
|
||||
}
|
||||
|
||||
@@ -20,6 +20,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/url"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
@@ -288,3 +289,10 @@ func generateListResult(objs []Object, limit int64) ([]Object, bool, string, err
|
||||
}
|
||||
return objs, len(objs) == int(limit), nextMarker, nil
|
||||
}
|
||||
|
||||
func decodeKey(value string, typ *string) (string, error) {
|
||||
if typ != nil && *typ == "url" {
|
||||
return url.QueryUnescape(value)
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
@@ -249,7 +249,7 @@ func (s *s3client) List(ctx context.Context, prefix, start, token, delimiter str
|
||||
objs := make([]Object, n)
|
||||
for i := 0; i < n; i++ {
|
||||
o := resp.Contents[i]
|
||||
oKey, err := url.QueryUnescape(*o.Key)
|
||||
oKey, err := decodeKey(*o.Key, aws.String(string(resp.EncodingType)))
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode key %s", *o.Key)
|
||||
}
|
||||
@@ -266,7 +266,7 @@ func (s *s3client) List(ctx context.Context, prefix, start, token, delimiter str
|
||||
}
|
||||
if delimiter != "" {
|
||||
for _, p := range resp.CommonPrefixes {
|
||||
prefix, err := url.QueryUnescape(*p.Prefix)
|
||||
prefix, err := decodeKey(*p.Prefix, aws.String(string(resp.EncodingType)))
|
||||
if err != nil {
|
||||
return nil, false, "", errors.WithMessagef(err, "failed to decode commonPrefixes %s", *p.Prefix)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user