gpt4 book ai didi

java - 如何使用java将 "ACL"设置为google存储文件夹下的所有文件

转载 作者:行者123 更新时间:2023-12-02 13:40:45 25 4
gpt4 key购买 nike

我想将 GCP 文件夹中的所有文件更改为公开共享。

我了解如何通过 gsutils 执行此操作。

如何通过 java api 执行此操作?

这是我的尝试:

public static void main(String[] args) throws Exception {
//// more setting up code here...

GoogleCredential credential = GoogleCredential.fromStream(credentialsStream, httpTransport, jsonFactory);
credential = credential.createScoped(StorageScopes.all());

final Storage storage = new Storage.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("monkeyduck")
.build();


final Storage.Objects.Get getRequest1 = storage.objects().get(bucketName, "sounds/1.0/arabic_test22/1000meters.mp3");
final StorageObject object1 = getRequest1.execute();


System.out.println(object1);

final List<ObjectAccessControl> aclList = new ArrayList<>();
// final ObjectAccessControl acl = new ObjectAccessControl()
// .setRole("PUBLIC-READER")
// .setProjectTeam(new ObjectAccessControl.ProjectTeam().setTeam("viewers"));
final ObjectAccessControl acl = new ObjectAccessControl()
.setRole("READER").setEntity("allUsers");
//System.out.println(acl);
aclList.add(acl);


object1.setAcl(aclList);

final Storage.Objects.Insert insertRequest = storage.objects().insert(bucketName, object1);
insertRequest.getMediaHttpUploader().setDirectUploadEnabled(true);

insertRequest.execute();
}
}

我得到 NPE 因为 insertRequest.getMediaHttpUploader() == null

最佳答案

尝试使用 ACL API,而不是使用 objects().insert()

ObjectAccessControl oac = new ObjectAccessControl()
oac.setEntity("allUsers")
oac.setRole("READER");

Insert insert = service.objectAccessControls().insert(bucketName, "sounds/1.0/arabic_test22/1000meters.mp3", oac);
insert.execute();
<小时/>

关于文件夹问题。在云存储中不存在“文件夹”的概念,只有“存储桶”和“对象名称”。事实上,您可以看到分组在文件夹内的文件(我说的是云存储浏览器),这只是一个图形表示。使用 API,您将始终处理“存储桶”和“对象名称”。

知道这一点后,Objects: list提供了一个 prefix 参数,您可以使用该参数来过滤名称以其开头的所有对象。如果您认为对象名称的开头是文件夹,则此过滤器可以实现您正在寻找的内容。

来 self 引用的API文档

In conjunction with the prefix filter, the use of the delimiter parameter allows the list method to operate like a directory listing, despite the object namespace being flat. For example, if delimiter were set to "/", then listing objects from a bucket that contains the objects "a/b", "a/c", "d", "e", "e/f" would return objects "d" and "e", and prefixes "a/" and "e/".

关于java - 如何使用java将 "ACL"设置为google存储文件夹下的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42749778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com