在上传文件过程中创建GCS文件夹时出现错误ACL

时间:2018-09-18 09:58:25

标签: google-cloud-storage

当我在Web UI的Google Cloud Storage存储桶中创建文件夹时,可以设置并获取该文件夹的ACL。

gsutil acl ch -u user@domain.com:R gs://testbucket/my-folder/
gsutil acl get gs://testbucket/my-folder/

从终端(Linux或Mac OS)创建文件夹后,我无法获取或设置文件夹的ACL,它总是返回:

  

CommandException:没有匹配的URL

此外,它发生在Python API中。

您对如何使用从本地操作系统创建的文件夹有任何建议吗?

3 个答案:

答案 0 :(得分:0)

根据this documentation,这可能是由于通过使用Cloud Console并创建了一个文件夹,创建了一个以“ /”字符结尾的对象,因为不允许以这种字符结尾的文件在Linux和MacOS上。此外,您可以在this document

中找到有关Cloud Storage子目录如何工作的更多信息。

如果您认为此操作无法正常工作,建议您打开public issue tracker来解释此行为,以确保正确参加。

答案 1 :(得分:0)

您首先应该检查一下您的存储桶中是否确实存在名称为folder/的对象。运行以下Bash命令,这将为您的存储桶添加一个“平面”前缀列表(即,不会尝试使用/作为分隔符来分隔路径组件的分隔符,该路径组件使用前缀来给出真实目录的错觉):

$ BUCKET=my-bucket-name-here
$ gsutil ls gs://${BUCKET}/my-folder** | grep "gs://${BUCKET}/my-folder/\$"

如果输出包含一行,则表明该“ my-folder /”对象存在。如果输出为空,则给出的错误是正确的,您可以运行该命令而无需使用pipe-to-grep部分,以查看存储桶中确实存在前缀为“ my-folder”的对象。

假设该对象确实存在,那么上面链接的命令应该可以工作(至少,它们在gsutil的4.34版本上对我有效)。如果您使用的是gsutil的旧版本,请尝试更新并重新尝试。

答案 2 :(得分:0)

问题出在编码字符上。从OS中,空白字符转换为'\ xa0'表示。如果该文件夹是通过Web UI创建的,则终端中的空白字符为''。