日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
Nodejs實(shí)現(xiàn)圖片的上傳、壓縮預(yù)覽、定時(shí)刪除

前言

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿(mǎn)足客戶(hù)于互聯(lián)網(wǎng)時(shí)代的撫寧網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

我們程序員日常都會(huì)用到圖片壓縮,面對(duì)這么常用的功能,肯定要嘗試實(shí)現(xiàn)一番。

第一步,node基本配置

這里我們用到的是koa框架,它可是繼express框架之后又一個(gè)更富有表現(xiàn)力、更健壯的web框架。

1、引入基本配置

 
 
 
 
  1. const Koa = require('koa');// koa框架
  2. const Router = require('koa-router');// 接口必備
  3. const cors = require('koa2-cors'); // 跨域必備
  4. const tinify = require('tinify'); // 圖片壓縮
  5. const serve = require('koa-static'); // 引入靜態(tài)文件處理
  6. const fs = require('fs'); // 文件系統(tǒng)
  7. const koaBody = require('koa-body'); //文件保存庫(kù)
  8. const path = require('path'); // 路徑

2、使用基本配置

 
 
 
 
  1. let app = new Koa();
  2. let router = new Router();
  3. tinify.key = ''; // 這里需要用到tinify官網(wǎng)的KEY,要用自己的哦,下面有獲取key的教程。
  4. //跨域
  5. app.use(cors({
  6.     origin: function (ctx) {
  7.         return ctx.header.origin;
  8.     },
  9.     exposeHeaders: ['WWW-Authenticate', 'Server-Authorization'],
  10.     maxAge: 5,
  11.     credentials: true,
  12.     withCredentials: true,
  13.     allowMethods: ['GET', 'POST', 'DELETE'],
  14.     allowHeaders: ['Content-Type', 'Authorization', 'Accept'],
  15. }));
  16. // 靜態(tài)處理器配置
  17. const home = serve(path.join(__dirname) + '/public/');
  18. app.use(home);
  19. //上傳文件限制
  20. app.use(koaBody({
  21.     multipart: true,
  22.     formidable: {
  23.         maxFileSize: 200 * 1024 * 1024 // 設(shè)置上傳文件大小最大限制,默認(rèn)2M
  24.     }
  25. }));

3、tinify官網(wǎng)的key獲取方式

https://tinypng.com/developers

輸入你名字跟郵箱,點(diǎn)擊 Get your API key , 就可以了。

注意:這個(gè)API一個(gè)月只能有500次免費(fèi)的機(jī)會(huì),不過(guò)我覺(jué)得應(yīng)該夠了。

第二步,詳細(xì)接口配置

我們要實(shí)現(xiàn)圖片上傳以及壓縮,下面我們將要實(shí)現(xiàn)。

1、上傳圖片

 
 
 
 
  1. var new1 = '';
  2. var new2 = '';
  3. // 上傳圖片
  4. router.post('/uploadPic', async (ctx, next) => {
  5.     const file = ctx.request.files.file; // 上傳的文件在ctx.request.files.file
  6.     // 創(chuàng)建可讀流
  7.     const reader = fs.createReadStream(file.path);
  8.     // 修改文件的名稱(chēng)
  9.     var myDate = new Date();
  10.     var newFilename = myDate.getTime() + '.' + file.name.split('.')[1];
  11.     var targetPath = path.join(__dirname, './public/images/') + `${newFilename}`;
  12.     //創(chuàng)建可寫(xiě)流
  13.     const upStream = fs.createWriteStream(targetPath);
  14.     new1 = targetPath;
  15.     new2 = newFilename;
  16.     // 可讀流通過(guò)管道寫(xiě)入可寫(xiě)流
  17.     reader.pipe(upStream);
  18.     //返回保存的路徑
  19.     console.log(newFilename)
  20.     ctx.body ="上傳成功"
  21. });

2、壓縮圖片以及定時(shí)刪除圖片

 
 
 
 
  1. // 壓縮圖片
  2. router.get('/zipimg', async (ctx, next) => {
  3.     console.log(new1);
  4.      let sourse = tinify.fromFile(new1); //輸入文件
  5.      sourse.toFile(new1); //輸出文件
  6.      // 刪除指定文件
  7.      setTimeout(() => {
  8.          fs.unlinkSync(new1);
  9.      }, 20000);
  10.      // 刪除文件夾下的文件
  11.       setTimeout(() => {
  12.           deleteFolder('./public/images/')
  13.       }, 3600000);
  14.       
  15.     let results = await change(new1);
  16.     ctx.body = results
  17. });
  18. // 壓縮完成替換原圖
  19. const change = function (sql) {
  20.     return new Promise((resolve) => {
  21.              fs.watchFile(sql, (cur, prv) => {
  22.                  if (sql) {
  23.                      // console.log(`cur.mtime>>${cur.mtime.toLocaleString()}`)
  24.                      // console.log(`prv.mtime>>${prv.mtime.toLocaleString()}`)
  25.                      // 根據(jù)修改時(shí)間判斷做下區(qū)分,以分辨是否更改
  26.                      if (cur.mtime != prv.mtime) {
  27.                          console.log(sql + '發(fā)生更新')
  28.                          resolve(new2)
  29.                      }
  30.                  }
  31.              })
  32.     })
  33. }
  34. // 刪除指定文件夾的圖片
  35. function deleteFolder(path) {
  36.     var files = [];
  37.     if (fs.existsSync(path)) {
  38.         if (fs.statSync(path).isDirectory()) {
  39.             files = fs.readdirSync(path);
  40.             files.forEach(function (file, index) {
  41.                 var curPath = path + "/" + file;
  42.                 if (fs.statSync(curPath).isDirectory()) {
  43.                     deleteFolder(curPath);
  44.                 } else {
  45.                     fs.unlinkSync(curPath);
  46.                 }
  47.             });
  48.             // fs.rmdirSync(path);
  49.         } 
  50.         // else {
  51.         //     fs.unlinkSync(path);
  52.         // }
  53.     }
  54. }

3、端口配置

 
 
 
 
  1. app.use(router.routes()).use(router.allowedMethods());
  2. app.listen(6300)
  3. console.log('服務(wù)器運(yùn)行中')

第三步,前臺(tái)頁(yè)面配置

實(shí)現(xiàn)了后臺(tái)的配置,那么我們將要展示實(shí)現(xiàn)它,頁(yè)面有點(diǎn)low,只是為了實(shí)現(xiàn)基本的功能。

 
 
 
 
  1.     
  2.     
  3.     
  4.     壓縮圖片
  5.     
  6.     

    壓縮圖片

  7.     
  8.     上傳進(jìn)度:
  •     
  •         
  •     
  •     

  •     
  •         
  •     
  •     
  •         壓縮
  •     

  • 新聞名稱(chēng):Nodejs實(shí)現(xiàn)圖片的上傳、壓縮預(yù)覽、定時(shí)刪除
    分享網(wǎng)址:http://www.5511xx.com/article/dhddooi.html