2

我想通过restify(或express)提供一个休息服务api

  • 服务的职责是让可以把音频/mpeg或者其他
    二进制文件放到我们服务器的客户端,然后验证认证,如果
    通过,把文件放到amazon s3,然后检查s3客户端
    响应状态码,如果s3客户端响应statusCode == 200 ,
    做点什么

解决方案1:使用请求流管道通过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}
}

解决方案2:使用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或其他更好的方法之间哪种方法更好?这里是否有任何性能问题需要知道?

4

1 回答 1

1

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

于 2012-11-16T12:53:38.300 回答