$ 符号结尾问题
SecretSun opened this issue · comments
Secret.Sun commented
object/s3.go
func (s *s3client) List(prefix, marker string, limit int64) ([]*Object, error) {
param := s3.ListObjectsInput{
Bucket: &s.bucket,
Prefix: &prefix,
Marker: &marker,
MaxKeys: &limit,
}
resp, err := s.s3.ListObjects(¶m)
if err != nil {
return nil, err
}
n := len(resp.Contents)
objs := make([]*Object, 0)
for i := 0; i < n; i++ {
o := resp.Contents[i]
if strings.HasSuffix(*o.Key, "$") {
logger.Infof("s3 path: %s was empty dir, skip it!", *o.Key)
continue
}
mtime := int(o.LastModified.Unix())
objs = append(objs, &Object{*o.Key, *o.Size, mtime, mtime})
}
/*
objs := make([]*Object, n)
for i := 0; i < n; i++ {
o := resp.Contents[i]
mtime := int(o.LastModified.Unix())
objs[i] = &Object{*o.Key, *o.Size, mtime, mtime}
}
*/
return objs, nil
}
tonic commented
这个是说用 $ 来标记一个 key 是一个文件夹么? 额这是一个通用做法么?
还是说现在大家都直接用 path/to/dir/
这种 /
结尾的 key 做 folder 的...
Davies Liu commented
Rclone 上也有类似讨论: rclone/rclone#753
@SecretSun 是不是 这些 $ 结尾的文件的大小也是 0?
Davies Liu commented
Fixed by #29
Secret.Sun commented
Rclone 上也有类似讨论: rclone/rclone#753
@SecretSun 是不是 这些 $ 结尾的文件的大小也是 0?
不是的,就是 $ 符号结尾,文件大小为0 我们公司从场景下,文件都是要的,还是建议都传输比较好
Yujun Zhang commented
if strings.HasSuffix(*o.Key, "$") { logger.Infof("s3 path: %s was empty dir, skip it!", *o.Key) continue }
这段是建议的修改吗?如果 $
符号结尾是普通文件,为什么要跳过呢?是 /
的笔误吗?或者你提个完整的 PR 上来方便 review? @SecretSun
Yujun Zhang commented
预期的行为应该是对于文件系统里的空目录,在对象存储上创建 / 结尾并且大小为 0 的对象,对象存储之间同步的时候需要同步创建这样的对象,对吗?
#29 里直接跳过了,没有实现这个过程吧?需要跳过的是遍历过程。不知道我的理解对不对。
Davies Liu commented
After #35 , all the keys will be copied.