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

问题描述

我想将3张图片上传到我的node.js服务器。我从客户端发送这3个图像作为byte64数组。由于它是一个异步功能,如何不一个一个地接一个做。有什么方法可以实现while循环或for循环,但是可以等待一次写操作结束的方法,以便在第一次通过时没有错误的情况下可以启动另一个写操作吗?因为当它只有3张图像时不难一一完成,但是如果有10张或更多,则每个文件都将作为上次编写的回调来完成。 请帮忙。 预先谢谢你。

解决方法

您可以使用fs.promises来代替fs的promise。然后,您可以使用Promise.all()来执行所有承诺。

一个例子是:

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具有“快速失败”功能,如果失败,它将被拒绝。 (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" });
              });