【发布时间】:2015-11-08 11:47:48
【问题描述】:
我正在编写代码以将可公开访问的文件上传到 Google Cloud Storage,但是,它们已上传,但未选中“公开共享”复选框。
我使用以下代码设置我的 Google 连接:
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("157264856793-sl14obknv58bi73m2co92oabrara9l8c@developer.gserviceaccount.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
并且还在我的 mataData 对象上调用 setACL:
metaData.setAcl(ImmutableList.of(new ObjectAccessControl().setEntity("allUsers").setRole("READER")));
并且还在插入对象中调用 setPredefinedAcl。
insert.setPredefinedAcl("publicRead");
有趣的是,最好的结果是我将两个与 ACL 相关的语句都省略了。然后至少我可以选择手动勾选 Google Cloud Console 中的复选框。我希望它默认勾选。
【问题讨论】: