Как создать пустую папку в Google Storage с помощью API Google? (Предположим, что /
является разделителем путей.)
Как создать пустую папку в Google Storage с помощью API Google?
Ответ 1
Google Cloud Storage не имеет папок или подкаталогов. Тем не менее, есть некоторая поддержка для имитации их. gsutil Как работают подкаталоги, хорошо читается для некоторого фона.
Объекты Google Cloud Storage представляют собой плоское пространство имен, но многие инструменты, включая gsutil и пользовательский интерфейс облачного хранилища Google, создают иллюзию иерархического дерева файлов.
Существует два широко используемых соглашения для создания иллюзии пустого подкаталога:
-
(рекомендуется) Создайте объект, который заканчивается конечной косой чертой. Например, чтобы создать подкаталог под названием
foo
в корневом каталоге, вы должны создать пустой объект (размер 0) под названиемfoo/
. -
(наследие) Создайте объект с
_$folder$
, добавленным к имени. Например, чтобы создать подкаталог под названиемfoo
в корневом каталоге, вы должны создать пустой объект (размер 0), называемыйfoo_$folder$
.
Обратите внимание, что большинство инструментов и утилит теперь используют метод 1. Метод 2 реже используется.
Ответ 2
@SheRey - глядя на папки, созданные через веб-интерфейс GCS, Content-Type установлен на application/x-www-form-urlencoded;charset=UTF-8
, но это не имеет большого значения. Вот что для меня работало в python:
# pip install google-cloud-storage
from google.cloud import storage
gcs_client = storage.Client(project='some_project')
bucket = gcs_client.get_bucket('some_bucket')
blob = bucket.blob('some/folder/name/')
blob.upload_from_string('', content_type='application/x-www-form-urlencoded;charset=UTF-8')
Ответ 3
Спасибо за Вопрос и выбранный Лучший ответ. Вот фрагмент кода, который я написал: Метод Python:
def create_folder(bucket_name, destination_folder_name):
storage_client = storage.Client()
bucket = storage_client.get_bucket(bucket_name)
blob = bucket.blob(destination_folder_name)
blob.upload_from_string('')
print('Created {} .'.format(
destination_folder_name))
Основной код, который вызывает метод:
folder = create_folder(bucket_name, 'test-folder/')
Ответ 4
Node.js
+ @google-cloud/[email protected]^2.5.0
:
Нужно только назначить пункт назначения, например: шаблон <folder>/<file Name>
.
В приведенном ниже примере я использую uuid
качестве имени папки, чтобы имитировать, что у каждого пользователя есть папка для хранения своих файлов.
it('should upload file and create a folder correctly', async () => {
const myStorage = new Storage({ keyFilename: path.resolve(__dirname, '../../../.gcp/cloud-storage-admin.json') });
const bucket = myStorage.bucket('ez2on');
const fileName = 'mmczblsq.doc';
const filePath = path.resolve(__dirname, '../../../tmp/${fileName}');
const uuid = faker.random.uuid();
await bucket.upload(filePath, {
destination: '${uuid}/${fileName}',
gzip: true,
metadata: {
cacheControl: 'public, max-age=31536000'
}
});
});
Результат:
Вот документы API для @google-cloud/storage
: https://googleapis.dev/nodejs/storage/latest/Bucket.html#upload
Go
+ cloud.google.com/go/storage
package main
import (
"cloud.google.com/go/storage"
"context"
"fmt"
"github.com/google/uuid"
"google.golang.org/api/option"
"io"
"log"
"os"
)
func main() {
ctx := context.Background()
opts := option.ClientOption(
option.WithCredentialsFile(os.Getenv("CredentialsFile")),
)
client, err := storage.NewClient(ctx, opts)
if err != nil {
log.Fatalf("%v", err)
}
filename := "mmczblsq.doc"
filepath := fmt.Sprintf("./tmp/%s", filename)
file, err := os.Open(filepath)
if err != nil {
log.Fatalf("%v", err)
}
defer file.Close()
uuidIns, err := uuid.NewUUID()
if err != nil {
log.Fatalf("%v", err)
}
object := fmt.Sprintf("%s/%s", uuidIns, filename)
log.Printf("object name: %s", object)
wc := client.Bucket("ez2on").Object(object).NewWriter(ctx)
if _, err := io.Copy(wc, file); err != nil {
log.Fatalf("%v", err)
}
if err := wc.Close(); err != nil {
log.Fatalf("%v", err)
}
}
Вывод stdout:
☁ upload [master] ⚡ CredentialsFile=/Users/ldu020/workspace/github.com/mrdulin/nodejs-gcp/.gcp/cloud-storage-admin.json go run main.go
2019/07/08 14:47:59 object name: 532a2250-a14c-11e9-921d-8a002870ac01/mmczblsq.doc
Проверьте файл в консоли облачной платформы Google: