Node.js实现文件上传的示例


Posted in Javascript onJune 28, 2017

文件上传指的是将用户本地的文件上传到服务器中。

上传文件需要处理两个位置:

客户端

  1. 客户端如何上传文件?
  2. 上传文件的表单项需要指定为input,type是file
  3. 要上传文件必须将表单enctype设置为multipart/form-data 这个参数表示表单将会以多部件表单的形式上传enctype=”application/x-www-form-urlencoded”是默认值。这个值的意思指将会对表单项的内容进行url编码,所谓url编码就将请求参数转换为二进制编码。

1、multipart/form-data body-parser 无法解析, multer 模块专门用来帮助我们解析多部件的请求体。

<body>

<h2>文件上传(file upload)</h2>
<form action="/testUpload" method="post" enctype="multipart/form-data" id="form">
  <pre>
    Hi sir <input type="text" name="username"/>


    upupup <input type="file" name="photo"/>


              <input type="submit" value="提交" id ="btn" style="width:100px;background-color: #99ff99" >
  </pre>
</form>
// 利用AJAX 上传文件
<script>

  var btn = document.getElementById("btn");
 btn.onclick = function () {


    //FormData 这个对象可以用来对表单中的数据进行封装
    //使用FormData来对表单中的数据进行包装
    var fd = new FormData(document.getElementById("form"));

    //创建一个xhr对象
    var xhr = new XMLHttpRequest();

    //设置请求的地址
    xhr.open("post" , "/testUpload");

    //发送请求
    xhr.send(fd);

    //接收响应
    xhr.onreadystatechange = function () {
      if(xhr.readyState == 4 && xhr.status == 200){
        alert(xhr.responseText);
      }
    };

    //取消默认行为
    return false;
  };

</script>
</body>

2. 服务器端

const express = require("express");
const app = express();
const bodyParser = require("body-parser");
const multer = require("multer");
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use(express.static("public"));
const storage = multer.diskStorage({
  //destination 用来设置上传文件的路径 可以接收一个回调函数, 或者一个字符串
  //如果传递一个回调函数的话,则需要确保路径有效
  destination: 'uploads/',

  //filename 属性可以用来指定文件上传以后保存到服务器中的名字
  filename: function (req, file, cb) {
    //cb(null, file.fieldname + '-' + Date.now())
    //获取文件的扩展名
    //Chrysanthemum.jpg
    let fname = file.originalname;
    let extName = "";
    //判断文件是否具有扩展名
    if(fname.lastIndexOf(".") != -1){
      extName = fname.slice(fname.lastIndexOf("."));
    }

    //上传文件时,一般不会直接将用户的文件名直接保存的服务器中
    //一般会随机生成一个文件名
    cb(null, file.fieldname + '-' + Date.now()+extName);
  }
})
const upload = multer(
  {
    storage: storage,
    limits:{
     //限制文件的大小为200kb
     fileSize:1024*200
     }
  });
app.post("/testUpload" , (req , res)=>{
  //获取解析请求体的函数
  let fu = upload.single('photo');
  //手动调用函数来解析请求体
  fu(req , res , (err)=>{
    if(err){
      //证明上传出错了,文件大小超标
      res.send("文件太大了,请上传200kb以下的文件!!");
    }else{
      //读取请求参数
      let username = req.body.username;
      res.send("上传成功~~~");
    }
  });
});
app.listen(3333,()=>{
  console.log("success");
});

文件夹示例

Node.js实现文件上传的示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Extjs EditorGridPanel中ComboBox列的显示问题
Jul 04 Javascript
js 自动播放的实例代码
Nov 19 Javascript
浅析jQuery1.8的几个小变化
Dec 10 Javascript
Javascript小技巧之生成html元素
May 15 Javascript
选择复选框按钮置灰否则按钮可用
May 22 Javascript
jQuery中replaceAll()方法用法实例
Jan 16 Javascript
js轮播图代码分享
Jul 14 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
Nov 07 Javascript
BootStrap 页签切换失效的解决方法
Aug 17 Javascript
从0到1构建vueSSR项目之路由的构建
Mar 07 Javascript
Vue+Node实现的商城用户管理功能示例
Dec 23 Javascript
Vue中使用import进行路由懒加载的原理分析
Apr 01 Vue.js
iscroll-probe实现下拉刷新和下拉加载效果
Jun 28 #Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 #Javascript
JS中把函数作为另一函数的参数传递方法(总结)
Jun 28 #Javascript
js+html制作简单日历的方法
Jun 27 #Javascript
ionic环境配置及问题详解
Jun 27 #Javascript
微信小程序 密码输入(源码下载)
Jun 27 #Javascript
Javascript实现base64的加密解密方法示例
Jun 27 #Javascript
You might like
javascript 触发事件列表 比较不错
2009/09/03 Javascript
js tab效果的实现代码
2009/12/26 Javascript
JS复制到剪贴板示例代码
2013/10/30 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
javascript折半查找详解
2015/01/26 Javascript
移动端JQ插件hammer使用详解
2015/07/03 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
基于react框架使用的一些细节要点的思考
2017/05/31 Javascript
原生js获取left值和top值的三种方法
2017/08/02 Javascript
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
微信小程序实现tab页面切换功能
2018/07/13 Javascript
浅谈webpack4 图片处理汇总
2018/09/12 Javascript
vue项目使用.env文件配置全局环境变量的方法
2019/10/24 Javascript
[01:36:17]DOTA2-DPC中国联赛 正赛 Ehome vs iG BO3 第一场 1月31日
2021/03/11 DOTA
python删除列表内容
2015/08/04 Python
简单讲解Python编程中namedtuple类的用法
2016/06/21 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
2018/05/15 Python
在Django admin中编辑ManyToManyField的实现方法
2019/08/09 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Python参数传递机制传值和传引用原理详解
2020/05/22 Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
2020/06/18 Python
TripAdvisor斯洛伐克:阅读评论、比较价格和酒店预订
2018/04/25 全球购物
汽修专业学生自我鉴定
2013/11/16 职场文书
厂长助理岗位职责
2013/12/27 职场文书
幼儿园家长会邀请函
2014/01/15 职场文书
晚会主持词开场白
2014/03/17 职场文书
家装业务员岗位职责
2015/04/03 职场文书
高考1977观后感
2015/06/04 职场文书
实习单位鉴定意见
2015/06/04 职场文书
2015年学校综合治理工作总结
2015/07/20 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
python基础详解之if循环语句
2021/04/24 Python
如何在python中实现ECDSA你知道吗
2021/11/23 Python
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android