более быстрый и оптимизированный способ загрузки файлов - PullRequest
0 голосов
/ 17 мая 2018

Я работаю над функцией загрузки изображений в файле node.js, в котором у меня есть массив из нескольких файловых объектов, и в каждом массиве есть путь к файлу хранения по умолчанию, если изображение, а также статус приоритета.Вот так

var imagesArr = [
    {path: "./img/img_3.jpg", priority: 3}, //exist
    {path: "./img/img_1.jpg", priority: 1}, //exist
    {path: "./img/img_5.jpg", priority: 5}, //exist
    {path: "./img/img_2.jpg", priority: 2}, //exist
    {path: "./img/img_4.jpg", priority: 4}, //exist
    {path: "./img/img_7.jpg", priority: 7}, //not exist
    {path: "./img/img_6.jpg", priority: 6}, //not exist
];

Сначала мне нужно отсортировать массив по приоритету.Итак, я сделал это, чтобы получить новый отсортированный массив.

var sortedFileArr = imagesArr.sort(function(a, b) {return (a.priority > b.priority) ? 1 : ((b.priority > a.priority) ? -1 : 0);} );

Теперь мне нужно перебрать массив, чтобы проверить, существует ли каждый файл с указанным путем или нет.Если да, то он будет загружен на новый целевой путь.Если нет, то я перепроверяю до 3 раз для этого файла, он существует.Если нет, то мне нужно отправить ответ, что файл не найден вместе с числом повторов.Я сделал это до сих пор, и он работает правильно.Я использую асинхронный цикл для итерации.

var resp = [];
async.each(sortedFileArr, function(fileArrItem, outerCallback) {
    var searchCount = 0, fileFoundStatus = false, retryCount = 0;
    while(searchCount <= 2) {
        if(fs.existsSync(fileArrItem.path)) {
            fileFoundStatus = true;
            retryCount = searchCount;
            break;
        } else {
            fileFoundStatus = false;
            retryCount = searchCount+1;
        }
        searchCount++;  
    }

    if(fileFoundStatus) {
        let imgName = fileArrItem.path.split("/")[2];
        fs.createReadStream(fileArrItem.path).pipe(fs.createWriteStream("./newImg/"+imgName));
        resp.push({name: fileArrItem.path, status: "Found", retryCount: retryCount})
        outerCallback();
    } else {
        resp.push({name: fileArrItem.path, status: "Not Found", retryCount: retryCount})
        outerCallback();
    }   
}, function(err){
    console.log(resp);
})

Теперь мой вопрос заключается в том, могу ли я сделать это другим простым или более оптимизированным способом.Заранее благодарим за любую помощь.

...