我想要通过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
答案 0 :(得分:1)
请尝试使用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();
关于文件夹问题。在云存储中&#34;文件夹&#34;的概念不存在,它只是&#34;桶&#34;和&#34;对象名称&#34;。 您可以看到文件夹在文件夹内的事实(我在谈论云存储浏览器)它只是一个图形表示。使用API,您将始终处理&#34;桶&#34;和&#34;对象名称&#34;。
了解这一点,Objects: list提供了一个prefix
参数,您可以使用该参数来过滤名称以其开头的所有对象。如果您认为对象名称的开头是文件夹,则此过滤器可以实现您正在寻找的内容。
从我引用的API文档中
结合前缀过滤器,使用分隔符 参数允许list方法像目录列表一样操作, 尽管对象命名空间是扁平的。例如,如果分隔符 设置为&#34; /&#34;,然后列出包含该文件的存储桶中的对象 对象&#34; a / b&#34;,&#34; a / c&#34;,&#34; d&#34;,&#34; e&#34;,&#34; e / f&#34 ;将返回物品&#34; d&#34;和 &#34; e&#34;和前缀&#34; a /&#34;和&#34; e /&#34;。