Node.js开发实战 使用Node.js+express实现简单的文件上传功能
沉沙 2018-07-19 来源 : 阅读 1209 评论 0

摘要:本篇Node.js教程探讨了如何使用Node.js+express实现简单的文件上传功能,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入。

1.建立express项目

express -e nodejs-uploadfile

   

2.下载multer中间件

npm i multer or yarn multer

   

3.在routes/index.js中引用multer,由于还要使用到文件操作,还要引用fs模块,并指定文件上传目录

const multer = require('multer');

const fs = require('fs');

const UPLOAD_PATH = './uploads'

   

单文件上传: index.html中文件如下( form文件的类型必须为 enctype="multipart/form-data" ),

<form action="/upload" method="post" enctype="multipart/form-data">

 <input name="fileUpload" type="file" />

 <img src="" alt="">

 <button type="submit">上传</button>

</form>

   

在routes/index.js里面添加upload路由用来处理上传文件的操作

router.post('/upload', upload.single('fileUpload'), function (req, res, next) {

 const { file } = req;

 fs.readFile(file.path, function(err, data) {

 fs.writeFile(`${UPLOAD_PATH}/${file.originalname}`, data, function (err) {

  if (err) res.json({ err })

  res.json({

  msg: '上传成功'

  });

 });

 })

})

   

如果上传的文件是图片的话,还可以使用FileReader对象实现图片预览

(function($){

 $('input').on('change', function(event) {

 var files = event.target.files,

  reader = new FileReader();

 if(files && files[0]){

  reader.onload = function (ev) {

   $('img').attr('src', ev.target.result);

  }

  reader.readAsDataURL(files[0]);

 }

 })

}(jQuery))

   

多文件上传: 多文件上传的原理和单文件上传的原理一样,代码如下:

router.post('/upload', upload.array('fileUpload'), function (req, res, next) {

 const files = req.files;

 const response = [];

 const result = new Promise((resolve, reject) => {

 files.map((v) => {

  fs.readFile(v.path, function(err, data) {

  fs.writeFile(`${UPLOAD_PATH}/${v.originalname}`, data, function(err, data) {

   const result = {

   file: v,

   }

   if (err) reject(err);

   resolve('成功');

  })

  })

 })

 })

 result.then(r => {

 res.json({

  msg: '上传成功',

 })

 }).catch(err => {

 res.json({ err })

 });

})

   

本文由职坐标整理并发布,了解更多内容,请关注职坐标WEB前端Node.js频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程