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

node中間層實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2018年06月11日 08:21:53   作者:憐白  
這篇文章主要介紹了node中間層實(shí)現(xiàn)文件上傳功能,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下

一般情況下,前端的文件上傳一般都是通過(guò)form表單的(<input type="file" />)來(lái)完成文件的上傳,如果使用node中間層完成跨域,文件的上傳就需要在node中間層處理成可讀流,轉(zhuǎn)成formData完成轉(zhuǎn)發(fā)。

一、form表單文件上傳

  這是最常見(jiàn)的文件上傳方式,通過(guò)form表單實(shí)現(xiàn),簡(jiǎn)單實(shí)用,設(shè)置一下method、enctype、action屬性就可以了,多文件上傳需要設(shè)置multiple屬性(部分瀏覽器支持還是有些問(wèn)題的)。

<form method="post" enctype="multipart/form-data" action="/api/upload">
  <input type="text" name="username">
  <input type="password" name="password">
  <input type="file" name="file">
  <input type="submit">
</form>

二、FormData實(shí)現(xiàn)文件上傳

  FormData對(duì)象用以將數(shù)據(jù)編譯成鍵值對(duì),以便向后臺(tái)發(fā)送數(shù)據(jù)。其主要用于發(fā)送表單數(shù)據(jù),但亦可用于發(fā)送帶鍵數(shù)據(jù)(keyed data),而獨(dú)立于表單使用。對(duì)部分瀏覽器對(duì)multiple屬性不支持的情況,可以使用formData的提交方式完成。

<!-- 獲取上傳文件轉(zhuǎn)成formData類(lèi)型的文件 -->
<input multiple id="file" name="file" type="file" />
<button id="btn">提交</button>

const oFile = document.getElementById('file')
const oBtn = document.getElementById('btn')

oBtn.addEventListener('click', () => {
  files = oFile.files
  const formData = new FormData()
  formData.append('file', files[0])
  formData.append('file1', files[1])

  fetch('/api/upload', {
    method: "POST",
    body: formData
  })
})

使用fetch請(qǐng)求不要設(shè)置Content-Type,否則無(wú)法請(qǐng)求

fetch請(qǐng)求默認(rèn)是不帶cookie 

三、node中間層完成文件上傳跨域

  跨域是因?yàn)闉g覽器的同源策略造成,跨域的方法有很多中,這里使用的是node中間層代理完成(服務(wù)端之間的請(qǐng)求是不存在跨域問(wèn)題)。

  node無(wú)法直接解析上傳的文件,需要引入拓展包c(diǎn)onnect-multiparty完成,這樣就可以拿到文件數(shù)據(jù)。

  拿到上傳文件,需要在node中轉(zhuǎn)發(fā)請(qǐng)求后臺(tái)server,這里的文件不能直接發(fā)給后臺(tái),需要將上傳的文件使用fs.createReadStream轉(zhuǎn)成可讀流,同時(shí)引入 form-data 包(node環(huán)境是沒(méi)有formData對(duì)象的),這樣就可以實(shí)現(xiàn)node中間層轉(zhuǎn)發(fā)文件類(lèi)型

  node部分代碼:

const fs = require('fs')
const path = require('path')
const FormData = require('form-data')
const express = require('express')
const fetch = require('node-fetch')
const router = express.Router()
const multipart = require('connect-multiparty');
var multipartMiddleware = multipart()

router.post('/upload', multipartMiddleware, function (req, res) {
  // console.log(req.body, req.files);

  const { path: filePath, originalFilename } = req.files.file
  const newPath = path.join(path.dirname(filePath), originalFilename)

  fs.rename(filePath, newPath, function (err) {
    if (err) {
      return;
    }
    else {
      const file = fs.createReadStream(newPath)
      const form = new FormData()
      form.append('file', file)

      fetch('http://localhost:8080/upload', {
        method: "POST",
        body: form
      })
    }
  })
  res.json({})
});

module.exports = router;

注意:

  • node無(wú)法直接解析上傳文件,需要引入npm包c(diǎn)onnect-multiparty中間件,或者引入npm包multiparty
  • node拿到文件,需要使用fs.createReadStream轉(zhuǎn)成可讀流
  • node環(huán)境沒(méi)有formData對(duì)象,需要引入npm包form-data
  • fetch請(qǐng)求提交formData數(shù)據(jù),不能設(shè)置Comtemt-Type

最后給大家附上完整的代碼: node中間層實(shí)現(xiàn)文件上傳

總結(jié)

以上所述是小編給大家介紹的node中間層實(shí)現(xiàn)文件上傳功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • express結(jié)合nodejs開(kāi)啟服務(wù)示例模版

    express結(jié)合nodejs開(kāi)啟服務(wù)示例模版

    這篇文章主要為大家展現(xiàn)了express結(jié)合nodejs開(kāi)啟服務(wù)的代碼示例模版,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • Node.js的HTTP模塊、URL模塊與supervisor工具介紹

    Node.js的HTTP模塊、URL模塊與supervisor工具介紹

    這篇文章介紹了Node.js的HTTP模塊、URL模塊與supervisor工具,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 利用adb shell和node.js實(shí)現(xiàn)抖音搶紅包功能(推薦)

    利用adb shell和node.js實(shí)現(xiàn)抖音搶紅包功能(推薦)

    這篇文章主要介紹了利用adb shell和node.js實(shí)現(xiàn)抖音搶紅包功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Node.js中的events事件模塊知識(shí)點(diǎn)總結(jié)

    Node.js中的events事件模塊知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于Node.js中的events事件模塊知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-12-12
  • 使用node-media-server搭建一個(gè)簡(jiǎn)易的流媒體服務(wù)器

    使用node-media-server搭建一個(gè)簡(jiǎn)易的流媒體服務(wù)器

    這篇文章主要介紹了使用node-media-server搭建一個(gè)簡(jiǎn)易的流媒體服務(wù)器,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • TypeScript開(kāi)發(fā)Node.js程序的方法

    TypeScript開(kāi)發(fā)Node.js程序的方法

    這篇文章主要介紹了TypeScript開(kāi)發(fā)Node.js程序的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶(hù)端功能示例

    nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶(hù)端功能示例

    這篇文章主要介紹了nodejs socket實(shí)現(xiàn)的服務(wù)端和客戶(hù)端功能,結(jié)合具體實(shí)例形式分析了nodejs基于socket通信實(shí)現(xiàn)的服務(wù)端與客戶(hù)端功能相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • Node.js 構(gòu)建命令行工具之實(shí)現(xiàn) ls 命令的 -a 和 -l 選項(xiàng)

    Node.js 構(gòu)建命令行工具之實(shí)現(xiàn) ls 命令的 -a 和 

    本文介紹了如何使用Node.js實(shí)現(xiàn)一個(gè)簡(jiǎn)單的命令行工具,模仿常用的ls命令,包括其-a和-l參數(shù)的功能,文章詳細(xì)講解了命令行參數(shù)的解析、文件類(lèi)型的判斷、權(quán)限信息的處理、文件鏈接數(shù)和修改時(shí)間的格式化等步驟,并提供了完整的代碼實(shí)現(xiàn)
    2024-11-11
  • nodejs導(dǎo)出excel的方法

    nodejs導(dǎo)出excel的方法

    這篇文章主要介紹了nodejs導(dǎo)出excel的方法,實(shí)例分析了nodejs導(dǎo)出excel的詳細(xì)步驟與相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • 使用vs code開(kāi)發(fā)Nodejs程序的使用方法

    使用vs code開(kāi)發(fā)Nodejs程序的使用方法

    本篇文章主要介紹了使用vs code開(kāi)發(fā)Nodejs程序的使用方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

措勤县| 吉隆县| 泸定县| 普宁市| 西青区| 大化| 论坛| 台中市| 岢岚县| 勐海县| 屏东市| 广安市| 大邑县| 沙湾县| 小金县| 肥城市| 东兰县| 涡阳县| 和静县| 庆安县| 沙河市| 台前县| 高清| 巢湖市| 女性| 南部县| 中超| 昌宁县| 岢岚县| 龙门县| 宜兰县| 木兰县| 达孜县| 淄博市| 山丹县| 望都县| 金湖县| 石城县| 宜昌市| 曲靖市| 安多县|