mirror of
https://github.com/rclone/rclone.git
synced 2025-02-09 09:51:43 +08:00
5039747f26
Before this change rclone would always use encoding-type url even if the client hadn't asked for it. This confused some clients. This fixes the problem by leaving the URL encoding to the gofakes3 library which has also been fixed. Fixes #7836
51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
package s3
|
|
|
|
import (
|
|
"path"
|
|
"strings"
|
|
|
|
"github.com/rclone/gofakes3"
|
|
"github.com/rclone/rclone/vfs"
|
|
)
|
|
|
|
func (b *s3Backend) entryListR(_vfs *vfs.VFS, bucket, fdPath, name string, addPrefix bool, response *gofakes3.ObjectList) error {
|
|
fp := path.Join(bucket, fdPath)
|
|
|
|
dirEntries, err := getDirEntries(fp, _vfs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for _, entry := range dirEntries {
|
|
object := entry.Name()
|
|
|
|
// workround for control-chars detect
|
|
objectPath := path.Join(fdPath, object)
|
|
|
|
if !strings.HasPrefix(object, name) {
|
|
continue
|
|
}
|
|
|
|
if entry.IsDir() {
|
|
if addPrefix {
|
|
response.AddPrefix(objectPath)
|
|
continue
|
|
}
|
|
err := b.entryListR(_vfs, bucket, path.Join(fdPath, object), "", false, response)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
} else {
|
|
item := &gofakes3.Content{
|
|
Key: objectPath,
|
|
LastModified: gofakes3.NewContentTime(entry.ModTime()),
|
|
ETag: getFileHash(entry),
|
|
Size: entry.Size(),
|
|
StorageClass: gofakes3.StorageStandard,
|
|
}
|
|
response.Add(item)
|
|
}
|
|
}
|
|
return nil
|
|
}
|