Исправление
await storage.bucket(bucketName).upload(`./uploads/${filename}`, {
gzip: false,
metadata: {
content_type : "audio/flac",
originalMimeType: "audio/flac",
cacheControl: 'public, max-age=31536000',
uploadType: "multipart"
},
Я не совсем уверен, почему это сработало, но мой инструктор предложил внести это изменение: set gzip: false. Теперь это успешно расшифровывает короткий и длинный звук из ведра. Возможно, это была проблема с кодированием содержимого.
Предыдущая проблема
Я делаю приложение преобразования речи в текст express в Node.js для проект учебного курса по кодированию. В настоящее время у меня возникла проблема с multer или процессом, во время которого файл загружается в мою "корзину" Google. Я могу вручную загрузить файлы .fla c в корзины Google, и тип файла останется как «audio / fla c». Я могу отправить эти файлы в API для довольно точной расшифровки. Однако при отправке файлов через мою составную форму и асинхронную c функцию uploadFile объекты будут загружены в корзины Google как «audio / x-fla c», и их нельзя будет воспроизвести или расшифровать. В моем интерфейсе пользователи должны увидеть форму, в которой они могут отправить файл .fla c. У меня вопрос: какие шаги мне нужно предпринять, чтобы убедиться, что файл остается «audio / fla c» по сравнению с «audio / x-fla c» при загрузке в корзину Google?
Вот как эта форма работает во внешнем интерфейсе:
method="POST" enctype="multipart/form-data">
<input type="file" id="audio" name="filename" class="btn">
<input type="submit" class="btn">
</form>
Вот как выглядит мой бэкэнд:
//set the destination of the form uploads to disk storage
let mStorage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, "./uploads")
},
filename: function (req, file, cb) {
//set the extension to the original extension from form input
cb(null, file.fieldname + Date.now() + path.extname(file.originalname));
// cb(null, file.buffer)
}
})
//initialize the upload variable
let uploads = multer({storage: mStorage})
//Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
const storage = new Storage();
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
router.post("/results", uploads.single("filename"),(req, res) => {
console.log("post route hit");
//get the input field from the user
// console.log(req.file);
let filename = req.file.filename;
console.log(filename);
const bucketName = 'voiceappbucket';
async function uploadFile() {
// Uploads a local file to the bucket
await storage.bucket(bucketName).upload(`./uploads/${filename}`, {
gzip: true,
metadata: {
content_type : "audio/flac",
cacheControl: 'public, max-age=31536000',
uploadType: "multipart"
},
});
console.log(`${filename} uploaded to ${bucketName}.`);
res.redirect(`/${req.file.filename}`)
}
uploadFile().catch(console.error);
})
Если бы у кого-то были похожие проблемы и они успешно прошли их, я бы с удовольствием услышать от вас. Мы будем благодарны за отзывы о моем коде или способ, которым я задал этот вопрос, поскольку я новичок в сообществе! : -)