Google cloud platform 谷歌存储和大文件

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

我正在使用Google云函数和bucket触发器:

  • 在云存储桶上推送视频
  • 使用ffmpeg从视频文件中提取音频并在本地存储
  • 将音频保存到另一个存储桶
  • 从音频中提取文本
  • 另存一桶
  • 自动翻译txt文件
如果文件小于5MB,则一切正常,但在文件从未上载到另一个存储桶之后。我试着把它上传到同一个桶上,但没有用

我已经检查了谷歌存储nodejs代码,该代码在上传5Mb后自动生成一个流,但它永远不会结束

有人已经知道这个问题了

我的代码是:

    // 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块,而后续部分(块)没有要上载的正确身份。不确定这是否与您面临的问题相同,但值得研究多部分上传的机制。