Как загрузить файл в папку, присутствующую в GCS bucket android

#java #android #google-cloud-storage

#java #Android #google-облачное хранилище

Вопрос:

я следую этому руководству по github для загрузки файлов в GCS bucket

https://github.com/thorrism/GoogleCloudExample

изображения успешно загружаются в корзину.

но я хочу загрузить файл в папку, присутствующую внутри корзины

например

KS_bucket — это имя корзины, а images — это имя папки, присутствующее внутри KS_bucket.

я попытался указать имя корзины следующим образом

KS_bucket/images или KS_bucket/images/

но я получаю ошибку недопустимого имени корзины

 . W/System.err: {
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:   "code" : 400,
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:   "errors" : [ {
2020-09-27 13:04:01.416 32172-32247/ W/System.err:     "domain" : "global",
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:     "message" : "Invalid bucket name: 'kS_bucket/images'",
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:     "reason" : "invalid"
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:   } ],
2020-09-27 13:04:01.416 32172-32247/com. W/System.err:   "message" : "Invalid bucket name: 'ks_bucket/images'"
2020-09-27 13:04:01.416 32172-32247/com..W/System.err: }
  

метод, который я использую для загрузки

  public static void uploadFile(String bucketName, String filePath)
            throws Exception {
       
        Storage storage = getStorage();

        StorageObject object = new StorageObject();
        object.setBucket(bucketName);

        File file = new File(filePath);

        InputStream stream = new FileInputStream(file);
        try {
            String contentType = URLConnection
                    .guessContentTypeFromStream(stream);
            InputStreamContent content = new InputStreamContent(contentType,
                    stream);

            Storage.Objects.Insert insert = storage.objects().insert(
                    bucketName, null, content);
            insert.setName(file.getName());
            insert.execute();
        } finally {
            stream.close();
        }
    }
  

ожидая некоторой помощи в этом, спасибо.

Комментарии:

1. Привет, просто чтобы убедиться, вы уже создали GCS bucket в своем проекте? Если да, есть ли у него такое имя («ks_bucket»)?

2. да, я могу загружать файлы в корзину, но я хочу загружать файлы в папку внутри корзины

Ответ №1:

здесь вы пытаетесь задать имя корзины с «/», которое недопустимо в облачном хранилище. что вам нужно сделать, это изменить имя файла, включая имя его папки, перед тем, как вставить его в корзину. setName это то, что вам нужно использовать здесь:

 insert.setName('folder/filename');
  

что-то вроде этого

Комментарии:

1. Спасибо @methkal khalawi