在编程之前,一定要有一个信条:代码是为了减少工作量而生的,重复枯燥的工作是不能容忍的。
需求
我前天遇到了一个小问题,需求是这样的: 我需要一个文件夹里面的所有图片文件并上传到服务器上,但是朋友给我发的文件夹里的图片文件全是中文命名,为了整洁性,我想将所有文件名rename成相应的英文。
思路
1.一个翻译工具(百度翻译API、有道翻译API等)。
2.递归遍历所有文件夹,依次重命名。
简单!
实践
- 语言
NodeJS
- 需求模块
fs/request。
- 代码
//引入模块
var fs = require("fs");
var request = require('request');
//下面是百度翻译API的函数文件和参数
var fn = require('./js-sdk/md5.js');//百度的MD5编码文件
var appid = '';//你申请的百度APIID
var key = '';//你的秘钥
var salt = (new Date).getTime();//随机数
var rename = function(src) {
// 读取目录中的所有文件/目录
fs.readdir(src, function(err, paths) {
if (err) {
throw err;
}
paths.forEach(function(path) {
//拼合路径
var _src = src + '/' + path;
//判断文件状态
fs.stat(_src, function(err, st) {
if (err) {
throw err;
}
// 判断是否为文件
if (st.isFile()) {
var query = path.split('.')[0];
// 多个query可以用\n连接 如 query='apple\norange\nbanana\npear'
var from = 'zh';//转译之前的语种
var to = 'en';//转译之后的语种
var str1 = appid + query + salt + key;
//这里的fn是我将MD5.js文件中的MD5函数暴露并引入的
var sign = fn.fn(str1);
var url = 'http://api.fanyi.baidu.com/api/trans/vip/translate?q=' + query + '&from=' + from + '&to=' + to + '&appid=' + appid + '&salt=' + salt + '&sign=' + sign;
request(encodeURI(url), function(error, response, body) {
if (!error && response.statusCode == 200) {
//将返回的数据拼合成为路径
var newPath = src + '/' + ((JSON.parse(body).trans_result[0].dst).replace(/\s+/g, "")).toLowerCase() + '.png';
//重命名
fs.rename(_src, newPath, function(err) {
if (err) throw err;
});
}
})
}
// 如果是目录则递归调用自身
else if (st.isDirectory()) {
exists(_src, rename);
}
});
});
});
var exists = function(src, callback) {
callback(src);
};
exists('./test', rename);
};
复制代码
提示
1.优化代码的逻辑和整洁性是面对循环调用时要注意的点。
END
这篇小笔记就结束了,算是比较轻松的一个轮子了。我将在下篇文章写出由这篇衍生出的需求————将文件夹按照存放路径顺序变成一个JSON。