无法使用aws2js将ReadStream保存到AmazonS3



在我的node.js应用程序中,我正在上传一个文件(保存到本地文件系统->/tmp/),从中创建Stream,并使用aws2js(Amazon CLI绑定)将该文件存储到我的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天的尝试中都不起作用;失败非常感谢。

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

至于node.jsv0.6.9,它本身并不不稳定,但它对Expect:100-continue的处理有缺陷。

我联系了项目的所有者,他指出,节点处理流的方式在内部发生了变化。他还指出,node0.6.9目前并不稳定。我用Node 0.6.5(大转变后的版本)测试了我的脚本aws2js@0.6.4使用beeing。我正在使用上面描述的代码;它有效!耶!:)

您可能想从示例脚本repo:中看看AwsSum和这个例子

  • https://github.com/appsattic/node-awssum/
  • https://github.com/appsattic/node-awssum-scripts/blob/master/bin/amazon-s3-upload.js

AwsSum可以使用fs.createReadStream()流式传输文件,适用于节点v0.6.x的所有版本,并且也得到了积极维护。

让我知道你过得怎么样,是否需要帮助。

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

相关内容

  • 没有找到相关文章

最新更新