Облачное хранилище Google Blob.delete () не создает архив, даже если управление версиями включено - PullRequest
0 голосов
/ 27 декабря 2018

Я использую Google Cloud Storage Java Api для управления своей корзиной в Firebase.я активировал управление версиями с помощью gsutil с помощью этой команды:

gsutil versioning set on gs://[BUCKET_NAME]

После этого я попытался удалить некоторые файлы с этим кодом Java:

com.google.cloud.storage.Bucket bucket = com.google.firebase.cloud.StorageClient.getInstance().bucket();
com.google.cloud.storage.Blob doc = bucket.get(documentPath);
log.info("Deleting document info => " + doc.toString());
doc.delete();

Журнал: удаление информации о документе => Blob{bucket = [BUCKET_NAME], name = test.pdf, generation = 1545929848902866, size = 196220, content-type = application / pdf, metadata = null}

Это работает, но удаляет как живое, так иархивная версия файла.

Пожалуйста, как просто удалить живую версию и сохранить архивную?

Ответы [ 2 ]

0 голосов
/ 02 января 2019

В версиях документов они говорят:

Если вы отправляете запрос на удаление с генерацией, соответствующей текущему живому объекту, Cloud Storage удаляет объект без созданиязаархивированная копия.

Итак, использование bucket.get('test.pdf'); возвращает документ и номер его поколения (вы можете увидеть его в журнале), даже если я не передаю номер поколения.

Решение:

@Bean
public FirebaseApp provideFirebaseOptions() throws IOException {
    log.info("INIT FIRBASE");
    FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(GoogleCredentials.fromStream(apiKey.getInputStream()))
            .setStorageBucket(bucketPath)
            .build();
    return FirebaseApp.initializeApp(options);
}
// add this bean to provide StorageOptions service
@Bean
public Storage provideStorageService() throws IOException {
    log.info("INIT STORAGE");
    return StorageOptions.newBuilder()
            .setCredentials(ImplFirebaseTrampolines.getCredentials(provideFirebaseOptions()))
            .build()
            .getService();
}

Получить и удалить документ:

//autowire storage bean
private final Storage storage;
public StorageService(Storage storage) {this.storage = storage;}
...
BlobId blobId = BlobId.of(StorageClient.getInstance().bucket().getName(), documentPath);
log.info("Deleting document info => " + blobId.toString());
storage.delete(blobId);
0 голосов
/ 28 декабря 2018

Вы отключаете управление версиями.Правильная команда включить управление версиями :

набор версий gsutil on gs: // [BUCKET_NAME]

...