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

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

新聞中心

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

前言

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

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

第一步,node基本配置

這里我們用到的是koa框架,它可是繼express框架之后又一個更富有表現(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'); //文件保存庫
  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 // 設置上傳文件大小最大限制,默認2M
  24.     }
  25. }));

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

https://tinypng.com/developers

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

注意:這個API一個月只能有500次免費的機會,不過我覺得應該夠了。

第二步,詳細接口配置

我們要實現(xiàn)圖片上傳以及壓縮,下面我們將要實現(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.     // 修改文件的名稱
  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)建可寫流
  13.     const upStream = fs.createWriteStream(targetPath);
  14.     new1 = targetPath;
  15.     new2 = newFilename;
  16.     // 可讀流通過管道寫入可寫流
  17.     reader.pipe(upStream);
  18.     //返回保存的路徑
  19.     console.log(newFilename)
  20.     ctx.body ="上傳成功"
  21. });

2、壓縮圖片以及定時刪除圖片

 
 
 
 
  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ù)修改時間判斷做下區(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('服務器運行中')

第三步,前臺頁面配置

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

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

    壓縮圖片

  7.     
  8.     上傳進度:
  •     
  •         
  •     
  •     

  •     
  •         
  •     
  •     
  •         壓縮
  •     

  • 名稱欄目:Nodejs實現(xiàn)圖片的上傳、壓縮預覽、定時刪除
    本文路徑:http://m.5511xx.com/article/dhddooi.html