gpt4 book ai didi

javascript - 如何使用 Node Js 编写和检索临时二进制文件?

转载 作者:搜寻专家 更新时间:2023-11-01 00:35:28 24 4
gpt4 key购买 nike

问题

我正在使用 Google Text To Speech (TTS)为了将生成的二进制音频文件保存到 Google Cloud Storage (GCS) .

在 Firebase 的 Cloud Functions 环境中保存本地二进制文件似乎不是一个好主意。因此,我正在寻找如何编写和检索临时二进制文件?当我尝试检索当前创建的临时文件时,我收到错误消息。

在下面的尝试解决方案中,临时文件显示为保存在日志中,然后我尝试在文件创建回调的成功部分检索临时文件。

错误

Error: Cannot parse JSON response  
at ApiError (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:43:9)
at Util.parseHttpRespBody (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:167:42)
at Util.handleResp (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:116:117)
at retryRequest (/user_code/node_modules/@google-cloud/storage/node_modules/@google-cloud/common/build/src/util.js:403:22)
at onResponse (/user_code/node_modules/@google-cloud/storage/node_modules/retry-request/index.js:200:7)
at /user_code/node_modules/@google-cloud/storage/node_modules/teeny-request/build/src/index.js:158:17
at process._tickDomainCallback (internal/process/next_tick.js:135:7)

尝试的解决方案

const admin = require('firebase-admin');
const functions = require('firebase-functions');
const path = require('path');
const os = require('os');
const {Storage} = require('@google-cloud/storage');
const projectId = 'coinverse-media-staging';
const storage = new Storage({
projectId: projectId,
});

const fs = require('fs');
const textToSpeech = require('@google-cloud/text-to-speech');

const client = new textToSpeech.TextToSpeechClient();

admin.initializeApp();

const text = 'Hello, world!';

const request = {
input: {text: text},
// Select the language and SSML Voice Gender (optional)
voice: {languageCode: 'en-US', ssmlGender: 'NEUTRAL'},
// Select the type of audio encoding
audioConfig: {audioEncoding: 'MP3'},
};

exports.getAudiocast = functions.https.onCall((data, context) => {

var bucket = storage.bucket('gs://[project-name].appspot.com/content/feeds/en-audio/');

client.synthesizeSpeech(request, (err, response) => {
if (err) {
console.error('ERROR:', err);
return;
}

const tempFile = path.join(os.tmpdir(), (data.id + '.mp3'));

fs.writeFile(tempFile, response.audioContent, 'binary', err => {
if (err) {
console.error('ERROR:', err);
return;
}

console.log('Audio content written to file: ' + tempFile);

bucket.upload(tempFile), function(err, file) {
if (!err) {
console.log('Audiocast uploaded!');
} else {
console.error('Audiocast upload error: ' + err.message);
}
};
});
});

return {
filePath: "cloudStorage/someFilePath",
};
});

下一步

我会尝试上传普通文本文件而不是二进制文件,看看临时文件格式是否有问题。

最佳答案

感谢@Doug_Stevenson 和@AndersonMendes 的指导!

解决方案

我在我的 Google Cloud Storage 中包含了 bucket id 和同一字符串中的文件路径,这是错误的来源。

桶字符串

var bucket = storage.bucket('gs://[projectName].appspot.com');

GCS上传方法

bucket.upload(tempFile, { destination: ("directory/someFolderName/" + fileName) }, (err, file) => {
if (!err) {
console.log('Audiocast uploaded!');
} else {
console.error('Audiocast upload error: ' + err.message);
}
});

关于javascript - 如何使用 Node Js 编写和检索临时二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com