Мне нужно преобразовать и записать каждую строку base64 из массива в другой файл с помощью fs.writeFile, но сохраняется только последний элемент массива. Взгляните на мой код ниже:
let receivedData =["iVBORw0KGgoAAAANSUhEUgAABM...", "4AAANiCAYAAACZ8IVOAAAKqGlDQ1BJQ0MgU..."]:
//decode base 64 to buffer
let decodeBase64 = (dataArray) => {
let result = [];
dataArray.forEach((element) => {
result.push(Buffer.from(element, 'base64'));
})
return result; //array
};
let writeFileAsync = (data) => {
let filename = Date.now() + '.jpeg';
return new Promise((resolve, reject) => {
data.forEach((value) => {
fs.writeFile(filename, value, (err) => {
if (err){
reject(err);
} else {
console.info('file is saved');
resolve(value);
}
})
})
}
let decoded = decodeBase64(receivedData);
writeFileAsync(decoded)
.then((result) => {
console.info('file is saved');
})
.catch((error) => {
console.info(error);
})
последнее значение полученных данных сохраняется в файловой системе, но не первый элемент Я знаю, что это как-то связано с выполнением асинхронного метода в цикле и, возможно, с чем-то еще. Цикл просто увеличивается до завершения записи файла.
Любая помощь / советы будут оценены thx





Попробуйте это, он загрузит ваш файл один за другим, это займет время, но даст вам соответствующий результат:
let fileUpload = async (FILES , PATH, CB)=>{
/** image Path **/
let lengthOfFiles = FILES.length, RETURN_IMAGEPATHS = [], count = 0,
uploadFunc= [];
for(let index= 0; index < lengthOfFiles; index++){
let name = Date.now() + ".png";
RETURN_IMAGEPATHS.push('http://localhost:3000/' + <PATH_FOR_FILE> + name);
uploadImage(<Image save path>, <Imagte file path>, FILES[index]);
}
CB(null, RETURN_IMAGEPATHS);
};
function uploadImage(imageSavePath, filePath, FILE){
return new Promise(async (resolve, reject)=> {
await fs.writeFileSync(imageSavePath, FILE, "base64", function (err) {
if (err)
reject(err);
else {
filePath ='http://localhost:3000/' + filePath;
resolve(filePath);
}
});
})
}
fileUpload(FILES , PATH, (err)=>{
if (err){
console.info(err);
}
else
console.info('Success');
})
Были введены обещания и асинхронные функции, чтобы избавиться от обычных обратных вызовов. Обещание uploadImage просто игнорируется.
Вам нужно сначала прочитать файл, затем объединить его со строкой для записи, а затем записать файл.