一、安裝配置類內容
1、下載安裝Node.js
官網鏈接:https://nodejs.org/en/download/。安裝教程鏈接:https://blog.csdn.net/alnorthword/article/details/88420874
2、安裝express框架
npm install -g express-generator
npm install -g express
3、新建項目
express -t ejs demo
根據提示進行。
4、按照提示啟動項目
npm start
5、在瀏覽下中輸入:http://localhost:3000/
如果出現:
說明項目建立成功!
二、項目包引入
1、在項目根目錄下創建lib文件夾,並在里面創建imageDown.js文件和img文件夾。
2、在Node.js項目里引入jszip包
npm install --save-dev jszip
3、引入imageinfo - - 獲取文件夾下的所有文件
npm install imageinfo
三、上代碼
1.引入使用的模塊
var fs = require("fs");//引用fs模塊
var JSZip = require("jszip"); //引用jszip模塊
var image = require("imageinfo"); //引用imageinfo模塊
var zip = new JSZip();
var request = require('request')
var path = require('path')
var url = require('url');
2.需要的值
const folderPaths = './img/' //文件夾路徑 有的地方需要拼接 '/', 為了減少拼接
const dstpath = "./img" //文件夾路徑
//下載網絡圖片的鏈接
var url_data = [
'http://pic1.win4000.com/wallpaper/4/57d7abcf2070b.jpg',
'http://d.hiphotos.baidu.com/zhidao/pic/item/6a63f6246b600c334c3e91cb1e4c510fd9f9a16a.jpg',
'http://img02.tooopen.com/images/20150213/tooopen_sy_80769327441.jpg'
]
3.創建新的文件夾用於保存圖片 (如果有自己的文件夾,可以不使用)
//mkdirSync事件 創建新的文件夾用於保存圖片 (如果有自己的文件夾,可以不使用)
function mkdirSync(dirname) {
if (fs.existsSync(dirname)) {
return true;
} else {
if (mkdirSync(path.dirname(dirname))) {
fs.mkdirSync(dirname);
return true;
}
}
return false
}
function downloadUrl(urlList) {
// mkdirSync(dstpath)
for (const url_item of urlList) {
const arg = url.parse(url_item);
const fileName = arg.pathname.split('/').slice(-1)[0];
const download_dstpath = dstpath + '/' + fileName
request(url_item).pipe(fs.createWriteStream(download_dstpath))
}
setTimeout(function () { packZipList() }, 1000);
}
downloadUrl(url_data); //調用下載圖片事件
5、打包zip方法,打包成功后再刪除原文件夾里的圖片(減少存儲)
function packZipList(){
var lists = getFiles.getFileList(folderPaths) //獲取文件夾里的所有圖片文件值
console.log("lists+", lists)
for (var i = 0; i < lists.length; i++) {
console.log("圖片名字", lists[i].filename)
var data = fs.readFileSync(folderPaths + lists[i].filename);
zip.file("photo" + i + ".jpg", data, { base64: true });
delFile(folderPaths + lists[i].filename, folderPaths) //調用刪除方法
}
zip
.generateNodeStream({ type: 'nodebuffer', streamFiles: true })
.pipe(fs.createWriteStream("out.zip")) //打包后的包名可以自己根據需求定義,路徑可以根據需求更改
.on('finish', function () {
console.log("out.zip written."); //管道寫完數據后,打印出提示
});
}
6、查找指定文件夾里的所有文件
function readFileList(path, filesList) {
var files = fs.readdirSync(path);
files.forEach(function (itm, index) {
var stat = fs.statSync(path + itm);
if (stat.isDirectory()) {
//遞歸讀取文件
readFileList(path + itm + "/", filesList)
} else {
var obj = {};//定義一個對象存放文件的路徑和名字
obj.path = path;//路徑
obj.filename = itm//名字
filesList.push(obj);
}
})
}
var getFiles = {
//獲取文件夾下的所有文件
getFileList: function (path) {
var filesList = [];
readFileList(path, filesList);
return filesList;
},
//獲取文件夾下的所有圖片
getImageFiles: function (path) {
var imageList = [];
this.getFileList(path).forEach((item) => {
var ms = image(fs.readFileSync(item.path + item.filename));
ms.mimeType && (imageList.push(item.filename))
});
console.log("imageList+", imageList)
return imageList;
}
};
//獲取文件夾下的所有圖片
var srclist = getFiles.getImageFiles(folderPaths);
var srcNewList = [];
console.log("srclist+",srclist);
srclist.forEach(function (item, index) {
console.log("item",item);
if (item.split(".")[1] == 'jpg') {
srcNewList.push({ 'imsrc': item })
} else {
srcNewList.push({ 'videosrc': item })
}
})
console.log("srcNewList+",srcNewList)
// console.log("getfiles+", getFiles.getFileList(folderPaths));
7、刪除圖片文件
function delFile(path, reservePath) {
if (fs.existsSync(path)) {
if (fs.statSync(path).isDirectory()) {
let files = fs.readdirSync(path);
files.forEach((file, index) => {
let currentPath = path + "/" + file;
if (fs.statSync(currentPath).isDirectory()) {
delFile(currentPath, reservePath);
} else {
fs.unlinkSync(currentPath);
}
});
if (path != reservePath) {
fs.rmdirSync(path);
}
} else {
fs.unlinkSync(path);
}
}
}
四、總結
以上的方法可以根據不同場景自行增添或者刪改事件,也可以自己進行其他功能的拓展。以上僅進行參考,如有不對的、或者是可以改進的地方。歡迎指正。
以下是參考的文章鏈接:
以下是參考的文章鏈接:
1.Nodejs 使用jszip3.0打包文件
2.nodejs實現獲取本地文件夾下圖片信息功能