我有以下逻辑:
//Defense mechanism code is before the fs operations...
fs.readFile(req.files.image.path, function (err, data) {
if (err) {
} else {
fs.writeFile(pathLocation, data, function (err) {
if (err) {
return res.send(err, 500);
}
据我所知,我有fs.read然后fs.write ...问题是我能避免先fs.read吗?换句话说直接从流中读取(req.files.image。路径)...
我正在尝试尽可能优化代码。
答案 0 :(得分:1)
req.files.image
不是一个流。它已经被缓冲并通过中间件(可能是连接bodyParser
)写入磁盘。您可以通过fs.rename将其重命名为最终的FS位置。 <{1}}是不必要的。
您可以通过将其重命名为磁盘来避免写入重命名。删除readFile/writeFile
中间件并直接在路由处理程序中执行:bodyParser
。
注意,既然你提到它是一张进入S3的图像,你实际上可以直接从浏览器直接流式传输到app服务器而不需要访问文件系统,直到S3。这在技术上是可行的,但它很脆弱,因此大多数生产部署都使用应用服务器上的临时文件来提高可靠性。
如果您愿意,也可以上传straight from the browser to S3。