我有一个实现,使用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
和选项,还是只用于文本?
答案 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}