无法使用aws 2 js将读取流保存到Amazon S3

时间:2012-01-31 22:01:25

标签: javascript node.js file-upload stream amazon-s3

在我的node.js应用程序中,我正在上传一个文件(保存到本地文件系统 - > / tmp /),我从中创建一个Stream of,使用aws2js (Amazon CLI bindings)将该文件存储到我的S3bucket中。在我进行任何进一步操作之前,问题始于尝试使用putStream(...)将文件初始保存到S3。 (使用´putFile(filepath)´有效!)

我的Bucket中的Entry已创建,并且回调没有给出错误。但是没有保存文件内容,条目有0个字节。

关注,我的代码;

....
var fileStream=fs.createReadStream(file.path),
    savePath = _makeSavePath( file.name );                  

s3.putStream(savePath, fileStream, 'public-read', {'content-type': file.type.mime, 'content-length':file.length}, function (err, s3File) {
    if (err){
        console.error(err);
        fileGetCB(err);
        return;
    }
    console.log("SAVED TO S3 '"+savePath+"'!!");

    //do further manipulations with fileStream
});
...

我可以保证,file已初始化,并且file.path文件存在。

我使用流而不使用S3.putFile(path)的原因是因为我将进一步操作该文件。通过使用流我可以在以后重用,以便不是每个模块都必须重新读取整个文件(可能甚至不能'重用'流,但这不是问题(还)...)

我对任何方向的任何方面都非常有帮助,因为我无法弄清楚为什么这不适用于4天的尝试和失败。谢谢!

3 个答案:

答案 0 :(得分:1)

实际上,我在GitHub上的原帖中犯了一个错误。 aws2js在内部改变了Stream上传到S3的方式。

对于node.js v0.6.9,它本身并不稳定,但它对Expect: 100-continue的处理失败。

答案 1 :(得分:0)

该项目的took up contact with the owner他指出,节点处理流的方式在内部发生了变化。他还指出,node0.6.9目前还不稳定。 我使用Node 0.6.5(大转移后的版本)和aws2js@0.6.4使用了我的脚本。我正在使用代码,正如我在上面描述的那样;有用!好极了! :)

答案 2 :(得分:0)

您可以在示例脚本repo中查看AwsSum和此示例:

AwsSum可以像你想要的那样使用fs.createReadStream()来传输文件,适用于所有版本的节点v0.6.x,并且也是主动维护的。

让我知道你是如何得到的,以及你是否需要任何帮助。

免责声明:我是AwsSum的作者。 :)