半夜睡不着,忽然想起最近在抓網絡數據的時候,批量下載圖片時的文件夾問題。好比:
https://img3.doubanio.com/img/celebrity/small/32214.jpg
https://img1.doubanio.com/view/movie_poster_cover/spst/public/p2443884789.webp
而這些圖片文件的路徑有不少是不一樣的。也就是放在了不一樣的文件目錄下。我但願下載下來的圖片目錄結構基本保持不變:
img/celebrity/small/32214.jpg
只是域名部分寫成我本身的。
有了需求,就開始寫代碼。仍是用node來實現:
var fs = require("fs");
var url = require("url");
//根據傳入的url,建立出該url中的path包含的全部文件夾
//dest是目標文件夾,新生成的文件夾會放在裏面
function createDirAccordingToUrl(originurl, dest) {
var urlobj = url.parse(originurl);
//將path用"/"分割爲數組
var dirs = urlobj.path.split('/');
var dir = dest;
//用for循環來實現
//由於開頭和結尾不是文件夾,所以從1開始,並排除數組的最後一項,也就是文件名: xx.jpg
for (var i = 1; i < dirs.length - 1; i++) {
//每循環一次,就把文件夾層級往裏進一步。
dir += "/" + dirs[i];
//判斷是否存在,且是否爲文件夾
if (fs.existsSync(dir) && fs.statSync(dir).isDirectory()) {
//若是該層文件夾存在,就繼續判斷下一層
} else {
console.log("文件夾不存在,建立:" + dir);
fs.mkdirSync(dir);
}
}
}
用法:
var URL = "http://192.168.0.110:8080/img/celebrity/medium/31577.jpg";
createDirAccordingOnUrl(URL, __dirname);
生成結果以下:
瞌睡終於來了。各位晚安。。。