Какие части большого двоичного объекта мне нужно хранить в моей базе данных, чтобы получить обратно файлы? - PullRequest
0 голосов
/ 26 января 2020

Теперь я могу хранить файлы в контейнерах:

Blob blob = storage.create(
                BlobInfo.newBuilder(
                        BUCKET_NAME,
                        Objects.requireNonNull(multipartFile.getOriginalFilename()))
                        .build(),
                multipartFile.getBytes()
        );

, но я не уверен, что я должен хранить в своей собственной базе данных, чтобы иметь возможность вернуть мои файлы обратно.

Теперь наивным подходом было бы просто сохранить URL-адрес в столбце google_bucket_url.

Однако уже есть mediaLink и selfLink - оба выглядят так, как будто они могут не всегда будет действительным чтобы быть уверенным в том, что я делаю.

Я, должно быть, пропускаю это в документах, но не могу найти никаких рекомендаций по этому вопросу.

1 Ответ

1 голос
/ 27 января 2020

Я рекомендую вам хранить полный URI ваших BLOB-объектов gs://bucket_name/path/to/file. Полный URI важен . Завтра вам, возможно, придется хранить файл на AWS S3 или локально, вы должны указать протокол, который будет использоваться для извлечения содержимого файла.

Когда у вас есть полный URI GCS gs://bucket_name/path/to/file, разделение будет легко получить файл

// One line to split only at the first "/" character encounter and, previously, to replace the "gs://" by nothing
s := strings.SplitN(strings.Replace(URI, "gs://", ""), "/", 1)

// Then you can use this
bucketName := s[0]
pathToFile := s[1]

Примечание: этот код (здесь Go) легко реализуем на любом языке

...