最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Node.js上傳文件功能之服務(wù)端如何獲取文件上傳進度

 更新時間:2018年02月05日 08:52:59   作者:程序猿小卡  
這篇文章主要介紹如何利用progress-stream獲取文件上傳進度,以及該組件使用過程中的注意事項

內(nèi)容概述

multer是常用的Express文件上傳中間件。服務(wù)端如何獲取文件上傳的進度,是使用的過程中,很常見的一個問題。在SF上也有同學(xué)問了類似問題《nodejs multer有沒有查看文件上傳進度的方法?》。稍微回答了下,這里順便整理出來,有同樣疑問的同學(xué)可以參考。

下文主要介紹如何利用progress-stream獲取文件上傳進度,以及該組件使用過程中的注意事項。

利用progress-stream獲取文件上傳進度

如果只是想在服務(wù)端獲取上傳進度,可以試下如下代碼。注意,這個模塊跟Express、multer并不是強綁定關(guān)系,可以獨立使用。

var fs = require('fs');
var express = require('express');
var multer = require('multer');
var progressStream = require('progress-stream');
var app = express();
var upload = multer({ dest: 'upload/' });
app.post('/upload', function (req, res, next) {
  // 創(chuàng)建progress stream的實例
  var progress = progressStream({length: '0'}); // 注意這里 length 設(shè)置為 '0'
  req.pipe(progress);
  progress.headers = req.headers;
  // 獲取上傳文件的真實長度(針對 multipart)
  progress.on('length', function nowIKnowMyLength (actualLength) {
    console.log('actualLength: %s', actualLength);
    progress.setLength(actualLength);
  });
  // 獲取上傳進度
  progress.on('progress', function (obj) {    
    console.log('progress: %s', obj.percentage);
  });
  // 實際上傳文件
  upload.single('logo')(progress, res, next);
});
app.post('/upload', function (req, res, next) {
  res.send({ret_code: '0'});
});
app.get('/form', function(req, res, next){
  var form = fs.readFileSync('./form.html', {encoding: 'utf8'});
  res.send(form);
});
app.listen(3000);

如何獲取上傳文件的真實大小

multipart類型,需要監(jiān)聽length來獲取文件真實大小。(官方文檔里是通過conviction事件,其實是有問題的)

// 獲取上傳文件的真實長度(針對 multipart)
progress.on('length', function nowIKnowMyLength (actualLength) {
  console.log('actualLength: %s', actualLength);
  progress.setLength(actualLength);
});

3、關(guān)于progress-stream獲取真實文件大小的bug?

針對multipart文件上傳,progress-stream 實例子初始化時,參數(shù)length需要傳遞非數(shù)值類型,不然你獲取到的進度要一直是0,最后就直接跳到100。

至于為什么會這樣,應(yīng)該是 progress-steram 模塊的bug,看下模塊的源碼。當(dāng)length是number類型時,代碼直接跳過,因此你length一直被認為是0。

tr.on('pipe', function(stream) {
  if (typeof length === 'number') return;
  // Support http module
  if (stream.readable && !stream.writable && stream.headers) {
    return onlength(parseInt(stream.headers['content-length'] || 0));
  }
  // Support streams with a length property
  if (typeof stream.length === 'number') {
    return onlength(stream.length);
  }
  // Support request module
  stream.on('response', function(res) {
    if (!res || !res.headers) return;
    if (res.headers['content-encoding'] === 'gzip') return;
    if (res.headers['content-length']) {
      return onlength(parseInt(res.headers['content-length']));
    }
  });
});

總結(jié)

以上所述是小編給大家介紹的Node.js上傳文件功能之服務(wù)端如何獲取文件上傳進度,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺談Node 調(diào)試工具入門教程

    淺談Node 調(diào)試工具入門教程

    這篇文章主要介紹了淺談Node 調(diào)試工具入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • node文字生成圖片的示例代碼

    node文字生成圖片的示例代碼

    本篇文章主要介紹了node文字轉(zhuǎn)圖片的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • 在Node.js中發(fā)出HTTP請求的 5 種方法

    在Node.js中發(fā)出HTTP請求的 5 種方法

    學(xué)習(xí)如何在 Node.js 中發(fā)出 HTTP 請求可能會讓人感到不知所措,因為有數(shù)十個可用的庫,每個解決方案都聲稱比上一個更高效,在這篇文章中,我們將探討在 Node.js 中發(fā)出 HTTP 請求的五種最流行的方法,并為每種方法提供說明,需要的朋友可以參考下
    2023-11-11
  • nvm mac 環(huán)境搭建過程

    nvm mac 環(huán)境搭建過程

    這篇文章主要為大家介紹了nvm mac 環(huán)境搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02
  • nodejs分頁類代碼分享

    nodejs分頁類代碼分享

    最近在寫nodejs項目,沒有發(fā)現(xiàn)合適或者特別好用的分頁插件,今天晚上自己寫了一個,分享給大家,也希望大家能夠拍磚!
    2014-06-06
  • express.js如何做mysql注入與node-mysql中防止SQL注入方法解析

    express.js如何做mysql注入與node-mysql中防止SQL注入方法解析

    這篇文章主要介紹了express.js如何做mysql注入與node-mysql中防止SQL注入方法,結(jié)合實例形式分析了express框架使用mysql數(shù)據(jù)庫過程中SQL注入的原理與防范技巧,需要的朋友可以參考下
    2023-05-05
  • M2實現(xiàn)Nodejs項目自動部署的方法步驟

    M2實現(xiàn)Nodejs項目自動部署的方法步驟

    這篇文章主要介紹了M2實現(xiàn)Nodejs項目自動部署的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 用NODE.JS中的流編寫工具是要注意的事項

    用NODE.JS中的流編寫工具是要注意的事項

    Nodejs讀寫流流的傳輸過程默認是以buffer的形式傳輸?shù)?除非你給他設(shè)置其他編碼形式, 小伙伴可以參考下。
    2016-03-03
  • Npm link的作用與使用示例代碼

    Npm link的作用與使用示例代碼

    npm link可以幫助我們模擬包安裝后的狀態(tài),它會在系統(tǒng)中做一個快捷方式映射,讓本地的包就好像 install 過一樣,可以直接使用,這篇文章主要介紹了Npm link的作用與使用示例代碼,需要的朋友可以參考下
    2023-01-01
  • node創(chuàng)建Vue項目步驟詳解

    node創(chuàng)建Vue項目步驟詳解

    在本篇文章里小編給大家整理的是關(guān)于node創(chuàng)建Vue項目步驟詳解內(nèi)容,需要的朋友們可以學(xué)習(xí)下。
    2020-03-03

最新評論

开阳县| 临桂县| 屏东县| 墨玉县| 华阴市| 缙云县| 团风县| 兴国县| 河东区| 安康市| 阳朔县| 河津市| 巨鹿县| 澄迈县| 沁阳市| 民乐县| 荥经县| 乐山市| 孝义市| 惠东县| 陕西省| 五华县| 甘德县| 武清区| 南阳市| 防城港市| 龙海市| 乐都县| 广昌县| 多伦县| 泰州市| 隆回县| 安多县| 克拉玛依市| 南乐县| 大冶市| 彭泽县| 常熟市| 定西市| 昆明市| 昭觉县|