Google cloud platform 谷歌存储和大文件
我正在使用Google云函数和bucket触发器:Google cloud platform 谷歌存储和大文件,google-cloud-platform,google-cloud-storage,google-cloud-functions,Google Cloud Platform,Google Cloud Storage,Google Cloud Functions,我正在使用Google云函数和bucket触发器: 在云存储桶上推送视频 使用ffmpeg从视频文件中提取音频并在本地存储 将音频保存到另一个存储桶 从音频中提取文本 另存一桶 自动翻译txt文件 如果文件小于5MB,则一切正常,但在文件从未上载到另一个存储桶之后。我试着把它上传到同一个桶上,但没有用 我已经检查了谷歌存储nodejs代码,该代码在上传5Mb后自动生成一个流,但它永远不会结束 有人已经知道这个问题了 我的代码是: // Imports the Google Cloud
- 在云存储桶上推送视频
- 使用ffmpeg从视频文件中提取音频并在本地存储
- 将音频保存到另一个存储桶
- 从音频中提取文本
- 另存一桶
- 自动翻译txt文件
// Imports the Google Cloud client library
const storage = require('@google-cloud/storage')();
const ffmpegPath = require('@ffmpeg-installer/ffmpeg').path
const ffmpeg = require('fluent-ffmpeg');
const path = require('path');
const fs = require('fs');
const rimraf = require('rimraf'); // rimraf directly
// Binaries for ffmpeg
ffmpeg.setFfmpegPath(ffmpegPath);
/**
* Triggered from a message on a Cloud Storage bucket.
*
* @param {!Object} event The Cloud Functions event.
* @param {!Function} The callback function.
*/
exports.processFile = function(event, callback) {
console.log(JSON.stringify(event));
console.log('Processing file: ' + event.data.name);
const bucket = storage.bucket(event.data.bucket);
const bucketAudio = storage.bucket('distant-bucket');
const videoFile = bucket.file(event.data.name);
const destination = '/tmp/' + path.basename( event.data.name );
return new Promise((resolve, reject) => { return videoFile.download({
destination: destination
}).then((error) => {
if (error.length > 0) {
reject(error);
} else {
resolve(destination);
}
})
})
.then((fileinfo) => {
const filename = destination.replace( '.mp4', '.flac' );
return new Promise((resolve, reject) => {
ffmpeg(fileinfo)
.videoBitrate(19200)
.inputOptions('-vn')
.format('flac')
.audioChannels(1)
.audioBitrate(44100)
.output(filename)
.on('end', function() {
console.log('extracted audio : '+event.data.name+" to "+filename);
resolve(filename);
})
.on('error', function(err, stdout, stderr) {
reject(err);
})
.run()
});
})
.then((flacOutput) => {
console.log('save file '+flacOutput);
const stats = fs.statSync(flacOutput)
console.log(stats.size / 1000000.0);
// TODO: upload FLAC file to Cloud Storage
return bucket
.upload( flacOutput ).catch((err) => {
console.error('Failed to upload flac.', err);
return Promise.reject(err);
});
}).then(() => {
console.log(`Audio uploaded.`);
// Delete the temporary file.
return new Promise((resolve, reject) => {
fs.unlink(destination);
fs.unlink(destination.replace( '.mp4', '.flac' ), (err) => {
if (err) {
reject(err);
} else {
resolve();
}
});
});
});
};
您预计此处理需要多长时间?是否有可能超过默认超时时间(根据设置为60秒)?您好,我设置了540秒的超时时间,但没有帮助。在这种环境下,访问地面军事系统是否正常工作?您是否可以运行gsutil perfiag,可能使用更大的大小(标志“-s 10M”)@NicolasJuen这可能是多部分上传的问题。我遇到了您在前面说明的
5mb
“限制”问题,但使用的是AWS S3,而不是地面军事系统。在我的例子中,默认情况下,多部分上载被拆分为5mb块,而后续部分(块)没有要上载的正确身份。不确定这是否与您面临的问题相同,但值得研究多部分上传的机制。您预计此过程需要多长时间?是否有可能超过默认超时时间(根据设置为60秒)?您好,我设置了540秒的超时时间,但没有帮助。在这种环境下,访问地面军事系统是否正常工作?您是否可以运行gsutil perfiag,可能使用更大的大小(标志“-s 10M”)@NicolasJuen这可能是多部分上传的问题。我遇到了您在前面说明的5mb
“限制”问题,但使用的是AWS S3,而不是地面军事系统。在我的例子中,默认情况下,多部分上载被拆分为5mb块,而后续部分(块)没有要上载的正确身份。不确定这是否与您面临的问题相同,但值得研究多部分上传的机制。