#javascript #node.js #google-cloud-platform #google-cloud-functions #google-cloud-storage
# #javascript #node.js #google-облачная платформа #google-cloud-функции #google-облачное хранилище
Вопрос:
У меня есть массив entryIdsWithImages
, который похож на имена папок в облачном хранилище Google, откуда я должен загрузить все изображения, т. Е. Я хочу загрузить все изображения с этих конкретных путей GCP. Итак, согласно @google-cloud/storage
документам, я сначала извлекаю все файлы из этих путей, затем загружаю их во временный каталог, который позже заархивирую. Однако я обнаружил, что загруженные изображения имели размер 0B, тогда как их нет в реальном хранилище. Где я ошибаюсь?
await Promise.all(
entryIdsWithImages.map(async (entryId) => {
const prefix = `images/${uid}/${entryId}`;
// download the images for the entry.
const [files] = await bucket.getFiles({
prefix,
});
files.forEach(async (file) => {
// file.name includes the whole path to the file, thus extract only the innermost path, which will be the name of the file
const fileName = file.name.slice(
file.name.lastIndexOf('/') 1
);
const imgTempFilePath = path.join(imageDirectory, fileName);
try {
await file.download({
destination: `${imgTempFilePath}.jpg`,
});
} catch (e) {
console.log(
`Error downloading the image at ${prefix}/${fileName}: `,
e
);
}
});
})
)
Версия, которую я использую: "@google-cloud/storage": "^4.7.0"
. Я пробовал использовать последнюю версию, но получил те же результаты.
Комментарии:
1. Что произойдет, если вы загрузите один файл с известным именем файла?
await storage.bucket(bucketName).file(srcFilename).download(destination: "foo.jpg"});
?2. Это работает нормально. Изображение загружается, как и ожидалось
3. Я пробовал ваш точный код, и он работал со мной (с расширениями и без расширений). Я также пробовал с 4.7.0 и последней версией, так же, как это сработало. Я предлагаю вам попробовать: 1- та же функция, но только с одним префиксом 2- другое ведро
Ответ №1:
Код API облачного хранилища выглядит правильным для меня. Я ожидаю, что это ваша проблема:
destination: `${imgTempFilePath}.jpg`,
Изменение типа файла на jpg
может привести к повреждению файлов, которые выглядят как 0K.
Этот код отлично подходит для поиска в моем корзине:
const downloadAll = async (bucket) => {
const imageDirectory = 'downloads';
const prefix = `READ`;
// download the images for the entry.
const [files] = await bucket.getFiles({
prefix,
});
files.forEach(async (file) => {
console.log(`file: ${file}`);
// file.name includes the whole path to the file, thus extract only the innermost path, which will be the name of the file
const fileName = file.name.slice(
file.name.lastIndexOf('/') 1
);
const imgTempFilePath = path.join(imageDirectory, fileName);
try {
await file.download({
destination: `${imgTempFilePath}.jpg`,
});
} catch (e) {
console.log(
`Error downloading the image at ${prefix}/${fileName}: `,
e
);
}
});
}
Комментарии:
1. Я не думаю, что это проблема. 1. Я пробовал с явным расширением и без него, результат был тот же. 2. Не было никаких проблем, когда я явно указывал полные пути к файлам (включая имя файла), но когда я пробую этот способ, т. Е. Получаю имена файлов, а затем загружаю, размер равен 0.
2. Вы пробовали это на других файлах? Ваш код отлично работает для моей корзины.