-
-
Notifications
You must be signed in to change notification settings - Fork 5.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
对象存储不能支持上传多级文件 #6588
Comments
Thanks for opening your first issue here! Be sure to follow the issue template! |
已知bug,近期比较忙,过段时间再修 |
感谢支持,我利用闲暇时间经过测试,已经定位修复了问题,为此提交了一个PR:#6660 希望大佬可以review下,如果可以的话,还请帮忙merge进去,感激不尽! |
我们可能说的不是一个问题,我解决的问题是:
比如有一个bucket: bucketName1,指向了阿里云盘的目录/root/path/storage。此时如果通过S3协议上传一个文件:
alist会直接去找上一级目录:/root/path/storage/aaa,这个目录不存在,则会直接报错。 我的修复逻辑是:在S3协议的实现中,如果检测到了目录不存在,且objectName含有/,说明是个多级的objectName,则创建这个多级目录。 我在网页端和windows客户端都进行了测试,没有问题。 你的截图是怎样的操作流程,可以描述下吗,可能是另一个问题。 |
就是上传一整个文件夹,或者创建文件夹的操作。 |
我懂了,是一样的问题,我应该将我的修复逻辑下沉一级,这样就能够支持了。目前我怕影响其他功能,只是在S3协议这一级做了修复。 |
我更新了PR,将修复逻辑下沉到了op/fs.go里边,已经测试通过了。不过这样每次在get的时候都会尝试makeDir,会带来多余的IO,以我对代码的理解只能写成这样了。 |
这个每次在get的时候尝试makeDir肯定是不可行的😊所以说这个问题比较棘手,得想办法解决 |
嗯,看样子需要找到所有的上层入口,在上层按需makeDir,才是比较好的方式。 |
你先把pr设成draft吧,重新想想办法吧,等我有空我也试一试 |
@akang943578 所以上次说的这个问题还是没完全搞定吧?😂要不你的pr先就解决signature v2的一个问题,这个问题后面再来个PR解决 |
抱歉我没有复现你的问题,我在alist网页端直接上传文件夹是可以成功的,然后我的只修复s3也是可以的。我看你的截图,是winscp连接的s3吗,由于我的alist不是在本机部署,我尝试连接,他就按照bucketname开头的那种url去找,连接是不成功的。或许我们可以约个时间视频一下,看看我到底如何复现 |
advanced里面选path-style,就可以连接了,alist现在还没支持host-style的访问 |
好的,我明天试一下 |
我复现并且定位了这个问题。 Seafile是直接PutObject, objectName=testFolder/1.txt。按照之前的修复逻辑,testFolder不存在则会makeDir,然后上传1.txt,成功。
因此需要在Alist S3 backend.go对于PutObject的实现中,区分objectName是目录还是文件。 这个是WinSCP带来的新问题,可以做一个单独PR去修复,不影响上一个PR的merge。 我后面花些时间看看怎么修复,需要区分objectName是目录还是文件,可能比较麻烦。 |
嗯,我尝试使用了WinSCP挂载Cloudflare R2, 发现创建目录等操作都是正常的,不知道Cloudflare是如何处理的 |
WinSCP创建目录的逻辑:请求Path末尾是 gofakes3的实现有问题,对path直接进行了Trim截取,这样就直接忽略了末尾的 https://github.com/alist-org/gofakes3/blob/master/routing.go#L23 但这个截取操作影响所有的S3请求,我可以只修PutObject,但我不知道其他的S3请求是否也存在问题。乱乱乱,或许应该给gofakes3的原作者提一个issue。 |
Fixed in 2b74999 |
Please make sure of the following things
I have read the documentation.
我已经阅读了文档。
I'm sure there are no duplicate issues or discussions.
我确定没有重复的issue或讨论。
I'm sure it's due to
AList
and not something else(such as Network ,Dependencies
orOperational
).我确定是
AList
的问题,而不是其他原因(例如网络,依赖
或操作
)。I'm sure this issue is not fixed in the latest version.
我确定这个问题在最新版本中没有被修复。
AList Version / AList 版本
v3.35.0
Driver used / 使用的存储驱动
Aliyun Open
Describe the bug / 问题描述
我根据文档进行对象存储的配置,挂载了阿里云盘已经存在的目录作为存储桶,给seafile配置存储桶作为存储后端。
配置完成后,在seafile创建资料库报错:
我发现这个请求URL中,seafile-commit-objects在阿里云盘已经存在,9d8233b0-d9e9-4c5f-a5de-0a9ac8f7899d/6dd1cd17494cd27d7d9b21ca07c562a686403acf这个是要创建的文件路径,我发现这是个二级路径,说明需要创建目录9d8233b0-d9e9-4c5f-a5de-0a9ac8f7899d。
但是看文档,应该是不支持目录的创建:
经过我自己用python脚本测试,发现不需要创建目录的时候可以成功,一旦需要创建目录,就会失败。可否支持目录的创建和删除?
Reproduction / 复现链接
https://alist.nn.ci/zh/guide/advanced/s3.html
Config / 配置
Logs / 日志
The text was updated successfully, but these errors were encountered: