亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

NodeJS實現(xiàn)圖片上傳代碼(Express)

 更新時間:2017年06月30日 14:54:11   作者:Fly_Elephant  
本篇文章主要介紹了NodeJS實現(xiàn)圖片上傳代碼(Express) ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

文件上傳是每個網(wǎng)站不可避免的,最近需要做些上傳圖片的功能,主要解決兩個問題,一個是文件上傳樣式和服務(wù)端路徑保存,功能很簡單,做起來倒是沒那么簡單,先從最簡單的頁面的上傳頁面的樣式開始。

頁面樣式

Html頁面默認(rèn)的上傳的是比較難看的,需要重做一個背景圖片,通過背景圖片添加上傳的圖片:

上傳圖片樣式:

<div class="upload-container">

  <input type="file" name="fileToUpload" id="fileToUpload" class="fileupload" />

</div> 

CSS樣式:

.upload-container {

  background-image: url(../../images/rv/add.jpg);

  background-repeat: no-repeat;

  width: 180px;

  height: 200px;

  padding-bottom: 10px;

  display: inline-block;

  vertical-align: middle;

  .fileupload {

    opacity: 0;

    filter: alpha(opacity=0);

    width: 200px;

    height: 200px;

  }

} 

Html點擊上傳有兩種比較常用的方式iFrame上傳和Ajax上傳,本文采用了Ajax上傳是HTML5提出了XMLHttpRequest對象的第二版,傳遞文件數(shù)據(jù)主要是通過FormData實現(xiàn):

$('.fileupload').change(function(event) {

  /* Act on the event */

  if ($('.fileupload').val().length) {

    var fileName = $('.fileupload').val();

    var extension = fileName.substring(fileName.lastIndexOf('.'), fileName.length).toLowerCase();

    if (extension == ".jpg" || extension == ".png") {

        var data = new FormData();

        data.append('upload', $('#fileToUpload')[0].files[0]);

        $.ajax({

          url: 'apply/upload',

          type: 'POST',

          data: data,

          cache: false,

          contentType: false, //不可缺參數(shù)

          processData: false, //不可缺參數(shù)

          success: function(data) {

            console.log(data);

          },

          error: function() {

            console.log('error');

          }

        });

    } 

  }

}); 

服務(wù)端保存

NodeJS服務(wù)端保存需要使用了第三方插件node-formidable,npm安裝地址:

npm install formidable@latest 

上傳圖片

var cacheFolder = 'public/images/uploadcache/';<br>exports.upload = function(req, res) {

  var currentUser = req.session.user;

  var userDirPath =cacheFolder+ currentUser.id;

  if (!fs.existsSync(userDirPath)) {

    fs.mkdirSync(userDirPath);

  }

  var form = new formidable.IncomingForm(); //創(chuàng)建上傳表單

  form.encoding = 'utf-8'; //設(shè)置編輯

  form.uploadDir = userDirPath; //設(shè)置上傳目錄

  form.keepExtensions = true; //保留后綴

  form.maxFieldsSize = 2 * 1024 * 1024; //文件大小

  form.type = true;

  var displayUrl;

  form.parse(req, function(err, fields, files) {

    if (err) {

      res.send(err);

      return;

    }

    var extName = ''; //后綴名

    switch (files.upload.type) {

      case 'image/pjpeg':

        extName = 'jpg';

        break;

      case 'image/jpeg':

        extName = 'jpg';

        break;

      case 'image/png':

        extName = 'png';

        break;

      case 'image/x-png':

        extName = 'png';

        break;

    }

    if (extName.length === 0) {

      res.send({

        code: 202,

        msg: '只支持png和jpg格式圖片'

      });

      return;

    } else {

      var avatarName = '/' + Date.now() + '.' + extName;

      var newPath = form.uploadDir + avatarName;

      displayUrl = UPLOAD_FOLDER + currentUser.id + avatarName;

      fs.renameSync(files.upload.path, newPath); //重命名

      res.send({

        code: 200,

        msg: displayUrl

      });

    }

  });

}; 

不同用戶上傳置放在不同的位置,根據(jù)需求來設(shè)置,當(dāng)然也有可以每張圖片都給不同的id編號,推薦第三方uuid插件:https://github.com/broofa/node-uuid

文件重命名:

fs.renameSync(files.upload.path, newPath); //重命名 

文件上傳進(jìn)度:

form.on('progress', function(bytesReceived, bytesExpected) {

}); 

node-formidable有很多官方API還有很多設(shè)置的選項,本文根據(jù)需求設(shè)置了幾項,有額外需求的可以參考官方地址~

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Node的stream數(shù)據(jù)流你了解嗎

    Node的stream數(shù)據(jù)流你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Node的stream數(shù)據(jù)流,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • node.js中使用socket.io制作命名空間

    node.js中使用socket.io制作命名空間

    這篇文章主要介紹了node中使用socket.io制作命名空間,需要的朋友可以參考下
    2014-12-12
  • 如何利用node實現(xiàn)靜態(tài)文件緩存詳解

    如何利用node實現(xiàn)靜態(tài)文件緩存詳解

    HTTP 緩存機(jī)制作為 Web 應(yīng)用性能優(yōu)化的重要手段,對于從事 Web 開發(fā)的同學(xué)們來說,應(yīng)該是知識體系的基礎(chǔ)環(huán)節(jié),也是想要成為前端架構(gòu)的必備技能,這篇文章主要給大家介紹了關(guān)于如何利用node實現(xiàn)靜態(tài)文件緩存的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • NodeJS實現(xiàn)客戶端js加密

    NodeJS實現(xiàn)客戶端js加密

    本文主要介紹了NodeJS實現(xiàn)客戶端js加密的思路與方法,具有一定的參考價值,下面跟著小編一起來看下吧
    2017-01-01
  • node省市區(qū)三級數(shù)據(jù)性能測評實例分析

    node省市區(qū)三級數(shù)據(jù)性能測評實例分析

    這篇文章主要介紹了node省市區(qū)三級數(shù)據(jù)性能,結(jié)合具體實例形式評測分析了node省市區(qū)三級數(shù)據(jù)的實現(xiàn)、改進(jìn)方法與運(yùn)行效率,需要的朋友可以參考下
    2019-11-11
  • 淺談Node.js:理解stream

    淺談Node.js:理解stream

    本篇文章主要介紹了Node.js:stream,Stream在node.js中是一個抽象的接口,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • 詳解從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信

    詳解從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信

    這篇文章主要介紹了從Node.js的child_process模塊來學(xué)習(xí)父子進(jìn)程之間的通信,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • 利用yarn代替npm管理前端項目模塊依賴的方法詳解

    利用yarn代替npm管理前端項目模塊依賴的方法詳解

    這篇文章主要給大家介紹了關(guān)于利用yarn代替npm管理前端項目模塊依賴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • npm?工具庫?yenv使用簡介

    npm?工具庫?yenv使用簡介

    這篇文章主要為大家介紹了npm?工具庫?yenv使用簡介,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • NodeJs 模仿SIP話機(jī)注冊的方法

    NodeJs 模仿SIP話機(jī)注冊的方法

    這篇文章主要介紹了NodeJs 模仿SIP話機(jī)注冊的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評論