需求简介,有一堆字体需要从oss上下载到本地,数据库只存了相对路径,但是完整路径可以拼接出来,每个字体要下载图片和字体并放入同一个文件夹(即一个字体一个文件夹)
// 下载方法
//引入相关资源包
var fs = require("fs");
var path = require("path");
var request = require("request");
/**
*
* @param {*} url 网络文件url地址
* @param {*} fileName 文件名
* @param {*} dir 下载到的目录
*/
function getfileByUrl(url,fileName,dir){
console.log('------------------------------------------------')
console.log(url)
console.log(fileName)
console.log(dir)
let stream = fs.createWriteStream(path.join(dir, fileName));
request(url).pipe(stream).on("close", function (err) {
console.log("文件" + fileName + "下载完毕");
});
}
//动态创建多级文件夹(同步)
function makeDir(dirpath) {
if (!fs.existsSync(dirpath)) {
var pathtmp;
dirpath.split("/").forEach(function(dirname) {
if (pathtmp) {
pathtmp = path.join(pathtmp, dirname);
}
else {
if(dirname){
pathtmp = dirname;
}else{
pathtmp = "/";
}
}
if (!fs.existsSync(pathtmp)) {
if (!fs.mkdirSync(pathtmp)) {
return false;
}
}
});
}else{
deleteFolderFiles(dirpath);
}
return true;
}
//主方法下载
let fonts = [
{
label: '思源黑体',
value: 'SourceHanSansSC-Regular',
picUrl: '',
type: 'woff'
},
{
value: 'FZShuSong-Z01',
label: '方正书宋',
picUrl: '',
type: 'ttf'
},
...... 贼多
]
//循环下载
for (let i = 0; i < fonts.length; i++) {
let item = fonts[i]
let picUrl = 'https://xxx/font/'+item.value+'/'+item.value+'.png'
let fontUrl = 'https://xxx/font/'+item.value+'/'+item.value+'.'+item.type
let dir = 'test12138/'+item.value
makeDir(dir)
getfileByUrl(picUrl, item.value+'.png', dir)
getfileByUrl(fontUrl, item.value+'.'+item.type, dir)
}
//运行
node yourjs.js
若报错说缺啥包,npm引入即可;
Good Luck!
乌拉~