• SpringBoot-13-插曲之Node文件重命名+自动生成json对象


    遇到的问题:图片太多,使用起来挺麻烦

    [1]有很多图片放服务器里,怎么能更好的管理,更方便拿到图片呢?
    [2]想用json 以一个对象数组的形式保存这些图片:以[{img:"图片名"},{img:"图片名"}....]形式
    [3]虽说想法是很好,但不可能一条一条自己写吧,好歹咱也是21世纪敲代码的人。
    [4]刚好最近学了点node,就拿来小试牛刀。
    
    9414344-3bc72e39d3f763e7.png
    图片
    const fs = require('fs');
    const path = require('path');
    
    let result = read('F:/SpringBootFiles/Image');
    function read(pathName) {
        let objs = [];
        //读取路径,返回所有文件节点=文件夹+文件
        let filePath = "F:/SpringBootFiles/Image/img.json";//输出路径
        fs.readdir(pathName, (err, files) => {//读文件夹
            for (let file of files) {//遍历文件
                let oldName = path.join('F:/SpringBootFiles/Image', file);//文件旧路径
                let extname = path.extname(file);//文件后缀名
                let basename = path.basename(file,extname);//文件名除去后缀(这里没有到,提一下)
                let newName = rangeChar(16, true) + extname;//新名称,随机获取16个字符
                fs.rename(oldName, path.join('F:/SpringBootFiles/Image', newName), err => {});//重命名
    
                let obj = {};//定义对象
                obj.img = newName;//该对象img属性为新文件名称
                objs.push(obj);//将对象添到数组中
            }
    
            fs.writeFileSync(filePath, JSON.stringify(objs), {encoding: 'utf8'})//写入数据
        });
    

    一开始想把乱七八糟的名字都给弄的整齐点,打算用时间戳,但程序跑太快,重名文件就给覆盖了,没办法,写两个函数随机生成任意字符串吧,16个任意大小写字母de组合应该差不多了。这两个函数还挺好用,生成随机字符串。

        function rangeChar(len, hasBig = false) {
            let allLen = 25;
            let chars = ["a", "b", "c", "d", "e", "f", "g",
                "h", "i", "j", "k", "l", "m", "n",
                "o", "p", "q", "r", "s", "t",
                "u", "v", "w", "x", "y", "z"];
            let charsBig = chars.map(item => item.toUpperCase());
    
            if (hasBig) {
                chars = chars.concat(charsBig);
                allLen = 49;
            }
            let result = [];
            for (let i = 0; i < len; i++) {
                let char = chars[rangeInt(0, allLen)];
                result.push(char);
            }
            return result.join('');
        };
    
        function rangeInt(s, e) {
            let max = Math.max(s, e);
            let min = Math.min(s, e) - 1;
            return min + Math.ceil(Math.random() * (max - min));
        };
    

    我的springboot已经将访问路径定位到F:/SpringBootFiles/Image文件夹下,访问是成功的,有了json,有了图片名,Ajax拿到数据,加上域名就能用了,不管有几千张,几万张图片,执行一下命令,轻松搞定。

    9414344-f1fa7f6ae9e33ce4.png
    json数据.png
    9414344-10ae1762841c0fa9.png
    拿到图片路径.png
  • 相关阅读:
    jquery中的Ajax
    javascript 中状态改变触发事件
    关于sql 资源竞争死锁现象
    Attribute 特性
    JavaScript的垃圾回收
    委托和事件
    彻底弄懂AngularJS中的transclusion
    理解AngularJS中的依赖注入
    用postal.js在AngularJS中实现订阅发布消息
    AngularJS 1.3中的一次性数据绑定(one-time bindings)
  • 原文地址:https://www.cnblogs.com/toly-top/p/9781960.html
Copyright © 2020-2023  润新知