如何将音频/视频数据uri从浏览器发送到S3中的文件

时间:2014-04-24 14:19:35

标签: javascript amazon-s3

我有一个实现,使用putObject将音频/视频blob上传到S3。 我们假设obj包含以下数据:

object {extension: "webm", type: "video/webm", 
contents: "data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvO…"}

其中contents是视频数据URI(base64字符串)。 服务器端代码是:

var s3 = new AWS.S3();
obj.contents = obj.contents.split(',').pop();
buffer = new Buffer(obj.contents, "base64");

var params = {
 Bucket: S3_BUCKET + "/videos/",
 Key: fname, // add new name 
 Body: buffer,
 ACL: 'private', 
 ContentType: obj.type
};
s3.putObject(params, handler);

如果我想在客户端执行此操作,如何传递base64字符串 putObject?在javascript中没有像Buffer这样的东西。 我看到putObject要求new Buffer('...') || streamObject || 'STRING_VALUE', 但是音频/视频文件的STRING_VALUE和选项,还是只用于文本?

1 个答案:

答案 0 :(得分:4)

首先,我要感谢AWS团队帮助回答这个问题。似乎虽然没有详细记录,但putObject()确实接受 Blob或任何本机类型数组(https://forums.aws.amazon.com/message.jspa?messageID=539115)。这意味着您可以直接在浏览器中获取任何Blob(例如音频或视频)并将其直接上传到S3文件。

audioBlob = this.GetAudioBlob()
var params = {
              Bucket: "MYBUCKET",
              Key: "audio_file_test.wav",
              Body: audioBlob,//this hast to be a string                                                        
              ACL: 'private',
              ContentType: 'audio/wav',
          };
s3.putObject(params, function(err,data){ console.log(err); } );

audioBlob恰好是一个Blob对象。 Blob {type: "audio/wav", size: 262188, slice: function}