isN*_*247 47 javascript amazon-s3 amazon-web-services node.js
更新:为了供将来参考,亚马逊现在已经更新了文档.根据@Loren Segal的评论如下: -
我们已更正最新预览版中的文档,以正确记录此参数.抱歉混淆!
我正在尝试使用适用于Node.Js的AWS开发工具包的开发者预览版,并希望使用压缩包将tarball上传到S3 putObject.
根据文档,Body参数应该是......
正文 - (Base64编码数据)
...因此,我正在尝试以下代码......
var AWS = require('aws-sdk'),
fs = require('fs');
// For dev purposes only
AWS.config.update({ accessKeyId: 'key', secretAccessKey: 'secret' });
// Read in the file, convert it to base64, store to S3
fs.readFile('myarchive.tgz', function (err, data) {
if (err) { throw err; }
var base64data = new Buffer(data, 'binary').toString('base64');
var s3 = new AWS.S3();
s3.client.putObject({
Bucket: 'mybucketname',
Key: 'myarchive.tgz',
Body: base64data
}).done(function (resp) {
console.log('Successfully uploaded package.');
});
});
Run Code Online (Sandbox Code Playgroud)
虽然我可以在S3中看到该文件,但如果我下载它并尝试解压缩它,我会收到文件已损坏的错误.因此,我的"base64编码数据"方法似乎已关闭.
有人可以帮我上传二进制文件putObject吗?
And*_*dyD 41
您不需要将缓冲区转换为base64字符串.只需将body设置为数据即可.
Cap*_*ion 24
这是一种使用流发送文件的方法,这可能是大文件所必需的,并且通常会减少内存开销:
var AWS = require('aws-sdk'),
fs = require('fs');
// For dev purposes only
AWS.config.update({ accessKeyId: 'key', secretAccessKey: 'secret' });
// Read in the file, convert it to base64, store to S3
var fileStream = fs.createReadStream('myarchive.tgz');
fileStream.on('error', function (err) {
if (err) { throw err; }
});
fileStream.on('open', function () {
var s3 = new AWS.S3();
s3.putObject({
Bucket: 'mybucketname',
Key: 'myarchive.tgz',
Body: fileStream
}, function (err) {
if (err) { throw err; }
});
});
Run Code Online (Sandbox Code Playgroud)
我能够以这种方式上传我的二进制文件.
var fileStream = fs.createReadStream("F:/directory/fileName.ext");
var putParams = {
Bucket: s3bucket,
Key: s3key,
Body: fileStream
};
s3.putObject(putParams, function(putErr, putData){
if(putErr){
console.error(putErr);
} else {
console.log(putData);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
56405 次 |
| 最近记录: |