如何使用文件流将两个或多个图像存储在服务器文件夹中
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" });
});
我想上传 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" });
});