如何使用文件流将两个或多个图像存储在服务器文件夹中

How to store two or more images in server folder with file stream

我想上传 3 张图片到我的 node.js 服务器。我从客户端发送这 3 张图像作为 byte64 数组。由于它是异步功能,因此如何一个接一个地执行而不是一个接一个地执行。有没有什么方法可以实现 while 循环或 for 循环,但会等待一次写入结束,以便在第一次通过时没有错误就可以开始另一个?因为当它只有 3 张图像时,一张一张地完成它并不难,但是如果有 10 张或更多,那么将每个文件写入作为以前写入的回调来做是地狱。 请帮忙。 提前谢谢你。

您可以使用 fs.promises 作为 fs 的 promise 替代品。然后就可以用Promise.all()来运行所有的promise了。

例如:

const fs = require('fs').promises;
const stuffToWrite = ["foo", "bar", "baz"];

// Create an async function
(async () => {
    await Promise.all(stuffToWrite.map((value, index) => fs.writeFile(`${index}.txt`, value)));
    console.log("Done!")
})();

这将创建 3 个文件,它们是 0.txt、1.txt、2.txt。您可以更改它以匹配您想要的内容。

根据文档,Promise.all 具有“fast-fail”功能,如果失败,它将被拒绝。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)

感谢您的回复和帮助。在您发表评论后,我在 node.js 中这样做了。我没有将它用作异步函数,而只是像这样。我想问一下是否可以像我一样使用 .then 和 .catch。我的意思是这可行,但它是如何在文件流完成所有文件写入后获得响应的?

Promise.all(
              images.map((value, index) =>
                fs.promises.writeFile(
                  getPath(index),
                  value.base64,
                  "base64",
                  (err) => {
                    if (err) {
                      console.log(err);
                    } else {
                      console.log("done");
                    }
                  }
                )
              )
            )
              .then(() => {
                res.status(200).send({ message: "data saved" });
              })
              .catch((err) => {
                console.log(err);
                res.status(404).send({ message: "something went wrong" });
              });