我正在編寫代碼以將可公開訪問的文件上傳到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