从服务器把文件放到亚马逊s3的哪种方式更好?

时间:2012-11-16 12:04:00

标签: node.js express restify fs knox-amazon-s3-client

我希望通过restify(或express)提供休息服务api

  • 服务的责任是让客户可以放音频/ mpeg或其他 二进制文件到我们的服务器,然后验证身份验证,如果
    传递,将文件放到亚马逊s3,然后检查s3客户端
    响应statusCode,如果s3客户端响应statusCode == 200,请执行 出头
  

solution1 :使用请求流管道将文件放入   亚马逊by knox

var stream = s3.put(filepath, {options});
serverReq.pipe(stream);
stream.on('response', function(err, s3Res) {
    if (err) { console.log(err); }
    if (s3Res.statusCode == 200) { store file infos on DB}
}
  

solution2 :使用formdiable和fs预先存储服务器本地临时文件夹中的文件,然后通过knox将文件放入亚马逊

(after pre store file on server local temp folder)
s3.putFile(sourcePath, destPath, {options}, function(err, _res) {
    (clear local files from local temp folder)

    if (err) { return next(err); }
    if (_res.statusCode == 200) {console.log('save on %s', s3.url(dest))}
    res.send(_res.statusCode);
    return next();
});
  

哪种方式在解决方案1和解决方案2或其他更好的方式之间更好?   这里有任何性能问题需要知道吗?

1 个答案:

答案 0 :(得分:1)

根据服务器负载和可用带宽,您的diskio是您最大的潜在瓶颈。我会说解决方案1直接流式传输文件,而不是将其存储到物理媒体。确保您不会尝试将整个对象存储到内存中,否则可能会遇到系统资源问题。