Я пытаюсь получить постоянный (без знака) URL-адрес для загрузки после загрузки файла в Google Cloud Storage. Я могу получить подписанный URL-адрес загрузки, используя file.createWriteStream()
, но file.createWriteStream()
не возвращает UploadResponse
, который включает в себя неподписанный URL-адрес загрузки. bucket.upload()
включает UploadResponse
и Получить URL-адрес загрузки из файла, загруженного с помощью облачных функций для Firebase * имеет несколько ответов, объясняющих, как получить неподписанный URL-адрес загрузки из UploadResponse
. Как мне изменить file.createWriteStream()
в моем коде на bucket.upload()
? Вот мой код:
const {Storage} = require('@google-cloud/storage');
const storage = new Storage({ projectId: 'my-app' });
const bucket = storage.bucket('my-app.appspot.com');
var file = bucket.file('Audio/' + longLanguage + '/' + pronunciation + '/' + wordFileType);
const config = {
action: 'read',
expires: '03-17-2025',
content_type: 'audio/mp3'
};
function oedPromise() {
return new Promise(function(resolve, reject) {
http.get(oedAudioURL, function(response) {
response.pipe(file.createWriteStream(options))
.on('error', function(error) {
console.error(error);
reject(error);
})
.on('finish', function() {
file.getSignedUrl(config, function(err, url) {
if (err) {
console.error(err);
return;
} else {
resolve(url);
}
});
});
});
});
}
Я попробовал это, это не сработало:
function oedPromise() {
return new Promise(function(resolve, reject) {
http.get(oedAudioURL, function(response) {
bucket.upload(response, options)
.then(function(uploadResponse) {
console.log('Then do something with UploadResponse.');
})
.catch(error => console.error(error));
});
});
}
Сообщение об ошибке было Path must be a string.
Другими словами, response
является переменной, но должна быть строкой.