zoukankan      html  css  js  c++  java
  • NodeJS缓存文件夹遍历

      当前项目需要将缓存图片入库,本人打算采用Nodejs进行处理,一来是联系,二来是测试一下Nodejs做这种问题的效率。

      首先,是本人打算是做文件夹遍历的同时,完成提取图片和入库操作。但是,在操作中遇到一个问题,由于数据量太大(100W张图片),导致node报打开文件过多错误。想来想去没有太好的方法解决,也请各位看官能提供一些好的建议。

      最后,测试了另外一种遍历方法,堆栈式。

      1.将数据路径遍历到数组中

    function walk(path) {
        var dirList = fs.readdirSync(path);
        dirList.forEach(function(item) {
            if (fs.statSync(path + '/' + item).isDirectory()) {
                walk(path + '/' + item)
            } else {
                if (item.split(format)[1] == '') {
                    putPathToList(path + '/' + item)
                }
            }
        })
    }
    function putPathToList(path) {
        fileList.push(path);
        count++;
        console.log(count)
    }
    walk(dicpath);

    2. 完成Path列表之后,进行数据的读取和入库

    function insertRows(id, value) {
        var sql = "insert into cachedata (Path,Base64) values (?,?)";
        var params = [id, value];
        dbhelper.sql.call(this, sql, params,
        function(error, result) {
            console.log("back");
            if (error) console.log(error);
            setItemToMySql()
        })
    }
    function setItemToMySql() {
        if (count > 0) {
            var path = fileList[count - 1];
            count--;
            console.log(path);
            var base64 = fs.readFileSync(path, "base64");
            insertRows(path, base64)
        }
    }
     setItemToMySql();

      目前代码就这些,暂时能完成任务,不过后面需要各种优化。

  • 相关阅读:
    10003 Cutting Sticks(区间dp)
    Cocos2d-x init() 和 onEnter() 区别
    HDU1181【有向图的传递闭包】
    空间参考系统与WKT解析
    面试经典-分金条
    uvalive 3971
    lua学习:使用Lua处理游戏数据
    面试经典--两个房间 每间房间三盏灯
    浙江大学PAT上机题解析之2-11. 两个有序链表序列的合并
    顺序队列之C++实现
  • 原文地址:https://www.cnblogs.com/yuxichina/p/2938551.html
Copyright © 2011-2022 走看看