我正在编写代码以将可公开访问的文件上传到Google云端存储,但是,它们已上传,但未选中“共享公开”复选框。Java Google云端存储API:如何设置新上传的对象公开
我用下面的代码来设置我的连接谷歌:
log.info("Setting up Google Cloud Storage");
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = new JacksonFactory();
List<String> scopes = new ArrayList<>();
scopes.add(StorageScopes.CLOUD_PLATFORM);
Credential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId("[email protected]account.com")
.setServiceAccountPrivateKeyFromP12File(resourceLoader.getResource("classpath:google-auth.p12").getFile())
.setServiceAccountScopes(scopes).build();
storage = new Storage.Builder(httpTransport, jsonFactory, credential).setApplicationName("nitro-login").build();
log.info("Google Cloud Storage set up");
然后将下面的代码写入文件:
public void save(String filename, MultipartFile mpf) {
try {
log.info("Uploading " + filename + "...");
InputStreamContent content = new InputStreamContent(mpf.getContentType(), mpf.getInputStream());
content.setLength(mpf.getSize());
StorageObject metaData = new StorageObject();
Storage.Objects.Insert insert = storage.objects().insert("nitro-resources", metaData, content).setName(filename);
insert.getMediaHttpUploader().setDisableGZipContent(true);
insert.execute();
log.info("Uploaded");
} catch (IOException io) {
log.error("Crash");
io.printStackTrace();
}
}
我已经试过了如下:
GSUtil的
./gsutil acl ch -u AllUsers:R gs://nitro-resources
./gsutil defacl ch -u AllUsers:R gs://nitro-resources
而且还呼吁SETACL我mataData对象:
metaData.setAcl(ImmutableList.of(new ObjectAccessControl().setEntity("allUsers").setRole("READER")));
的并且在插入对象还呼吁setPredefinedAcl。
insert.setPredefinedAcl("publicRead");
有趣的是,最好的结果是,当我离开这两个ACL相关的语句了。然后,至少我可以选择手动勾选Google云端控制台中的复选框。我希望它默认打勾。
感谢您的回答麦克。我的问题是试图让我上传的对象(新的)公开。出于某种原因,我使用的代码和gsutil的组合没有这样做。我非常感谢您提供的任何帮助。我完全丧失了。 – Spider
蜘蛛 - 运行“gsutil defacl ch -u AllUsers:R gs:// nitro-resources”命令后,请运行“gsutil defacl get gs:// nitro-resources”来仔细检查它是否有效。 - 您应该看到“实体”授予:“allUsers”,“role”:“READER”。然后尝试上传一个对象,然后检查其ACL(gsutil acl get gs:// nitro-resources/that-object)。你有什么发现? –
不幸的不是。是的,当我使用最后一个命令时,我看到allUsers角色,但是我上传的任何对象似乎都是私有的和无主的。 – Spider