Я пытаюсь получить загрузку для прямой передачи в GCS без сохранения в файловую систему, см. Фрагмент ниже.
const { Storage } = require('@google-cloud/storage');
const http = require('http');
const storage = new Storage();
const fs = require("fs");
const bucketName = 'BUCKETNAMEHERE';
const blobName = 'image.jpg';
const bucket = storage.bucket(bucketName);
const blob = bucket.file(blobName);
const streamDownload = () => {
http.get("http://i3.ytimg.com/vi/J---aiyznGQ/mqdefault.jpg")
.pipe(blob.createWriteStream({
metadata: {
contentType: 'image/jpg'
}
}))
.on("error", (err) => {
console.error(`error occurred`);
})
.on('finish', () => {
console.info(`success`);
});
};
На финише никогда не срабатывает. Нет выхода вообще.
Я могу без проблем транслировать http.get в локальный файл, так что эта часть выглядит нормально.
Также работает потоковая передача из локальной файловой системы в GCS, как показано ниже:
const streamFs = () => {
fs.createReadStream('/path/to/mqdefault.jpg')
.pipe(blob.createWriteStream({
metadata: {
contentType: 'image/jpg'
}
}))
.on("error", (err) => {
console.error(`error occurred`);
})
.on('finish', () => {
console.info(`success`);
});
};
Второй фрагмент регистрирует «успех», и файл присутствует в корзине.
И http.get
, и fs.createReadStream
создают поток чтения.
Что я здесь не так делаю?