Прежде всего, перемещение объекта в облачном хранилище невозможно. Даже если в какой-либо библиотеке реализована операция move
или rename
, базовыми вызовами API являются copy
, тогда delete
.
Для копирования объекта у вас есть пример на нескольких языках здесь .
Не беспокойтесь о наличии или отсутствии папки. Ты хочешь секрет? Папка не существует в облачном хранилище. Путь - это просто метаданные файла, которые помогают «человеку» лучше организовать объекты. Поэтому не стесняйтесь устанавливать желаемый путь, даже если он не существует.
Наконец, чтобы получить нужную папку в соответствии с вашим исходным файлом, вы должны поиграться с разбиением строки и подстрокой.
ОБНОВЛЕНИЕ
Мой код работает. Я придерживаюсь вашего требования, , но небезопасно, если файл перетаскивается в корень корзины!
Здесь index.js
const {Storage} = require('@google-cloud/storage');
const {path} = require('path');
exports.helloGCS = (event, context) => {
const storage = new Storage();
const gcsEvent = event;
const sourceFileBucket = gcsEvent.bucket
const sourcePathOnly = gcsEvent.name
const sourceFolder = sourcePathOnly.split('/').slice(-2) //Keep only the file name and the last folder name in the path. Not safe!!
storage
.bucket(sourceFileBucket)
.file(sourcePathOnly)
.copy(storage.bucket('<Bucket dest>').file(sourceFolder[0] + '/' + sourceFolder[1])); //this is not safe!!
};
Иpackage.json
{
"name": "my_package",
"description": "",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies" : {
"@google-cloud/storage": "^4.1.1"
}
}