簡體   English   中英

在AWS Lambda中使用Node.js流上載音頻文件

[英]Uploading an audio file using Node.js Streams in AWS Lambda

因此,我嘗試從s3檢索mp3音頻文件(大約9 MB),將數據通過管道傳輸到寫入流,然后使用來自/ tmp /文件的readStream上載到另一個目標s3存儲桶。 這是一個lambda函數,它接收s3上傳事件,並嘗試將數據從創建的對象寫入另一個存儲桶。

const fs = require('fs');
const AWS = require('aws-sdk');

const s3 = new AWS.S3();

exports.handler = (event, context, callback) => {
    var sourceBucket = event.Records[0].s3.bucket.name;
    var sourceKey = event.Records[0].s3.object.key;

    var getParams = {
        Bucket: sourceBucket,
        Key: sourceKey
    };

    const inputFilename = '/tmp/' + sourceKey;

    //writing and reading streams
    const writeStream = fs.createWriteStream(inputFilename);
    s3.getObject(getParams).createReadStream().pipe(writeStream);

    var putParams = {
        Body: fs.createReadStream(inputFilename),
        Bucket: "example-destination-bucket",
        Key: 'transfer-' + sourceKey        
    };

    s3.upload(putParams, function(err, data) {
        if (err) console.log(err, err.stack); // an error occurred
        else     console.log('logging data' + data);  // successful response
    });
};

這樣可以將密鑰成功放入s3存儲桶,但上傳的文件大小為0字節。 知道為什么這會導致上傳為空嗎?

該文件需要下載,這需要一些時間,因此您需要使用file.on('finish')這樣的調用。

  const writeStream = fs.createWriteStream(inputFilename);
  s3.getObject(getParams).createReadStream().pipe(writeStream);
  writeStream.on('finish', function() { 

  //upload to S3 code
  }

與其編寫一個Lambda從一個s3存儲桶復制到另一個s3存儲桶,不為什么在源s3存儲桶上設置復制規則? 它會自動復制上傳的所有文件,並且您可以跨帳戶進行復制。

在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM