哪种方式更适合将文件从服务器放到亚马逊 s3?

Posted

技术标签:

【中文标题】哪种方式更适合将文件从服务器放到亚马逊 s3?【英文标题】:which way is better for put file to amazon s3 from server? 【发布时间】:2012-11-05 03:47:58 【问题描述】:

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

服务的职责是让客户可以放音频/mpeg 或其他 二进制文件到我们的服务器,然后验证身份验证,如果 通过,把文件放到amazon s3,然后检查s3客户端 响应 statusCode,如果 s3 客户端响应 statusCode == 200,则执行 东西

解决方案1:使用请求流管道将文件放入 诺克斯的亚马逊

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 之间哪种方式更好或其他更好的方式? 这里有什么性能问题需要知道吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

有什么方法可以限制传入的缓冲区大小吗? 您可以使用 response.pause() 和 response.resume() 来管理缓冲区大小和带宽。这将导致 TCP 算法适当地后退。 (见nodejs.org/api/http.html#http_response_pause)

以上是关于哪种方式更适合将文件从服务器放到亚马逊 s3?的主要内容,如果未能解决你的问题,请参考以下文章

Fine Uploader 无法从亚马逊 S3 绘制缩略图

将数据从 gs 存储桶移动到 s3 亚马逊存储桶的 GCP dataproc 集群 hadoop 作业失败 [控制台]

如何从亚马逊 s3 存储桶中删除文件?

从亚马逊的 s3 加载一个 html 元素

如何使用 axios 将文件上传到亚马逊 s3 存储桶?

将文件从S3下载到EC2时出错