mirror of
https://github.com/rclone/rclone.git
synced 2024-11-23 12:29:24 +08:00
qingstor: use lib/encoder
This commit is contained in:
parent
35d6ff89bf
commit
d122d1d191
|
@ -20,6 +20,7 @@ import (
|
||||||
"github.com/rclone/rclone/fs"
|
"github.com/rclone/rclone/fs"
|
||||||
"github.com/rclone/rclone/fs/config/configmap"
|
"github.com/rclone/rclone/fs/config/configmap"
|
||||||
"github.com/rclone/rclone/fs/config/configstruct"
|
"github.com/rclone/rclone/fs/config/configstruct"
|
||||||
|
"github.com/rclone/rclone/fs/encodings"
|
||||||
"github.com/rclone/rclone/fs/fshttp"
|
"github.com/rclone/rclone/fs/fshttp"
|
||||||
"github.com/rclone/rclone/fs/hash"
|
"github.com/rclone/rclone/fs/hash"
|
||||||
"github.com/rclone/rclone/fs/walk"
|
"github.com/rclone/rclone/fs/walk"
|
||||||
|
@ -29,6 +30,8 @@ import (
|
||||||
qs "github.com/yunify/qingstor-sdk-go/v3/service"
|
qs "github.com/yunify/qingstor-sdk-go/v3/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const enc = encodings.QingStor
|
||||||
|
|
||||||
// Register with Fs
|
// Register with Fs
|
||||||
func init() {
|
func init() {
|
||||||
fs.Register(&fs.RegInfo{
|
fs.Register(&fs.RegInfo{
|
||||||
|
@ -184,7 +187,8 @@ func parsePath(path string) (root string) {
|
||||||
// split returns bucket and bucketPath from the rootRelativePath
|
// split returns bucket and bucketPath from the rootRelativePath
|
||||||
// relative to f.root
|
// relative to f.root
|
||||||
func (f *Fs) split(rootRelativePath string) (bucketName, bucketPath string) {
|
func (f *Fs) split(rootRelativePath string) (bucketName, bucketPath string) {
|
||||||
return bucket.Split(path.Join(f.root, rootRelativePath))
|
bucketName, bucketPath = bucket.Split(path.Join(f.root, rootRelativePath))
|
||||||
|
return enc.FromStandardName(bucketName), enc.FromStandardPath(bucketPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
// split returns bucket and bucketPath from the object
|
// split returns bucket and bucketPath from the object
|
||||||
|
@ -353,7 +357,8 @@ func NewFs(name, root string, m configmap.Mapper) (fs.Fs, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
_, err = bucketInit.HeadObject(f.rootDirectory, &qs.HeadObjectInput{})
|
encodedDirectory := enc.FromStandardPath(f.rootDirectory)
|
||||||
|
_, err = bucketInit.HeadObject(encodedDirectory, &qs.HeadObjectInput{})
|
||||||
if err == nil {
|
if err == nil {
|
||||||
newRoot := path.Dir(f.root)
|
newRoot := path.Dir(f.root)
|
||||||
if newRoot == "." {
|
if newRoot == "." {
|
||||||
|
@ -550,6 +555,7 @@ func (f *Fs) list(ctx context.Context, bucket, directory, prefix string, addBuck
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
remote := *commonPrefix
|
remote := *commonPrefix
|
||||||
|
remote = enc.ToStandardPath(remote)
|
||||||
if !strings.HasPrefix(remote, prefix) {
|
if !strings.HasPrefix(remote, prefix) {
|
||||||
fs.Logf(f, "Odd name received %q", remote)
|
fs.Logf(f, "Odd name received %q", remote)
|
||||||
continue
|
continue
|
||||||
|
@ -569,12 +575,13 @@ func (f *Fs) list(ctx context.Context, bucket, directory, prefix string, addBuck
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, object := range resp.Keys {
|
for _, object := range resp.Keys {
|
||||||
key := qs.StringValue(object.Key)
|
remote := qs.StringValue(object.Key)
|
||||||
if !strings.HasPrefix(key, prefix) {
|
remote = enc.ToStandardPath(remote)
|
||||||
fs.Logf(f, "Odd name received %q", key)
|
if !strings.HasPrefix(remote, prefix) {
|
||||||
|
fs.Logf(f, "Odd name received %q", remote)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
remote := key[len(prefix):]
|
remote = remote[len(prefix):]
|
||||||
if addBucket {
|
if addBucket {
|
||||||
remote = path.Join(bucket, remote)
|
remote = path.Join(bucket, remote)
|
||||||
}
|
}
|
||||||
|
@ -646,7 +653,7 @@ func (f *Fs) listBuckets(ctx context.Context) (entries fs.DirEntries, err error)
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, bucket := range resp.Buckets {
|
for _, bucket := range resp.Buckets {
|
||||||
d := fs.NewDir(qs.StringValue(bucket.Name), qs.TimeValue(bucket.Created))
|
d := fs.NewDir(enc.ToStandardName(qs.StringValue(bucket.Name)), qs.TimeValue(bucket.Created))
|
||||||
entries = append(entries, d)
|
entries = append(entries, d)
|
||||||
}
|
}
|
||||||
return entries, nil
|
return entries, nil
|
||||||
|
|
|
@ -126,6 +126,15 @@ credentials. In order of precedence:
|
||||||
- Access Key ID: `QS_ACCESS_KEY_ID` or `QS_ACCESS_KEY`
|
- Access Key ID: `QS_ACCESS_KEY_ID` or `QS_ACCESS_KEY`
|
||||||
- Secret Access Key: `QS_SECRET_ACCESS_KEY` or `QS_SECRET_KEY`
|
- Secret Access Key: `QS_SECRET_ACCESS_KEY` or `QS_SECRET_KEY`
|
||||||
|
|
||||||
|
### Restricted filename characters
|
||||||
|
|
||||||
|
The control characters 0x00-0x1F and / are replaced as in the [default
|
||||||
|
restricted characters set](/overview/#restricted-characters). Note
|
||||||
|
that 0x7F is not replaced.
|
||||||
|
|
||||||
|
Invalid UTF-8 bytes will also be [replaced](/overview/#invalid-utf8),
|
||||||
|
as they can't be used in JSON strings.
|
||||||
|
|
||||||
<!--- autogenerated options start - DO NOT EDIT, instead edit fs.RegInfo in backend/qingstor/qingstor.go then run make backenddocs -->
|
<!--- autogenerated options start - DO NOT EDIT, instead edit fs.RegInfo in backend/qingstor/qingstor.go then run make backenddocs -->
|
||||||
### Standard Options
|
### Standard Options
|
||||||
|
|
||||||
|
|
|
@ -271,6 +271,12 @@ const AzureBlob = encoder.MultiEncoder(
|
||||||
encoder.EncodeBackSlash |
|
encoder.EncodeBackSlash |
|
||||||
encoder.EncodeRightPeriod)
|
encoder.EncodeRightPeriod)
|
||||||
|
|
||||||
|
// QingStor is the encoding used by the qingstor backend
|
||||||
|
const QingStor = encoder.MultiEncoder(
|
||||||
|
encoder.EncodeInvalidUtf8 |
|
||||||
|
encoder.EncodeCtl |
|
||||||
|
encoder.EncodeSlash)
|
||||||
|
|
||||||
// ByName returns the encoder for a give backend name or nil
|
// ByName returns the encoder for a give backend name or nil
|
||||||
func ByName(name string) encoder.Encoder {
|
func ByName(name string) encoder.Encoder {
|
||||||
switch strings.ToLower(name) {
|
switch strings.ToLower(name) {
|
||||||
|
@ -316,7 +322,8 @@ func ByName(name string) encoder.Encoder {
|
||||||
return OpenDrive
|
return OpenDrive
|
||||||
case "pcloud":
|
case "pcloud":
|
||||||
return Pcloud
|
return Pcloud
|
||||||
//case "qingstor":
|
case "qingstor":
|
||||||
|
return QingStor
|
||||||
case "s3":
|
case "s3":
|
||||||
return S3
|
return S3
|
||||||
//case "sftp":
|
//case "sftp":
|
||||||
|
|
Loading…
Reference in New Issue
Block a user