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 相关文章推荐
IE8 原生JSON支持
Apr 13 Javascript
javascript操作cookie_获取与修改代码
May 21 Javascript
jQuery 操作下拉列表框实现代码
Feb 22 Javascript
ExtJs使用IFrame的实现代码
Mar 24 Javascript
jquery选择器之属性过滤选择器详解
Jan 27 Javascript
node.js中的events.emitter.removeListener方法使用说明
Dec 10 Javascript
JS中产生标识符方式的演变
Jun 12 Javascript
JS拖动鼠标画出方框实现鼠标选区的方法
Aug 05 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
Jun 08 Javascript
CKEditor4配置与开发详细中文说明文档
Oct 08 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
May 15 Javascript
小程序登录之支付宝授权的实现示例
Dec 13 Javascript
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
丧钟首部独立剧集《丧钟:骑士与龙》北美正式开播,场面血腥
2020/04/09 欧美动漫
实现php加速的eAccelerator dll支持文件打包下载
2007/09/30 PHP
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
教你如何使用php session
2013/10/28 PHP
PHP中递归的实现实例详解
2017/11/14 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
图解JavaScript中的this关键字
2020/05/28 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
BootStrap实现轮播图效果(收藏)
2016/12/30 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
2018/05/28 Javascript
vuejs router history 配置到iis的方法
2018/09/20 Javascript
VUE页面中通过双击实现复制表格中内容的示例代码
2020/06/11 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
2021/01/27 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
利用python实现简单的邮件发送客户端示例
2017/12/23 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
Tornado实现多进程/多线程的HTTP服务详解
2019/07/25 Python
python全局变量引用与修改过程解析
2020/01/07 Python
如何给Python代码进行加密
2020/01/10 Python
python实现最速下降法
2020/03/24 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
销售业务实习自我鉴定
2013/09/23 职场文书
业务总经理岗位职责
2014/02/03 职场文书
服装店营销方案
2014/03/10 职场文书
《春笋》教学反思
2014/04/15 职场文书
责任担保书范文
2014/05/21 职场文书
团队拓展活动总结
2014/08/27 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
幼儿园小班教育随笔
2015/08/14 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
Pytorch GPU内存占用很高,但是利用率很低如何解决
2021/06/01 Python
Spring整合Mybatis的全过程
2021/06/28 Java/Android
解决mysql的int型主键自增问题
2021/07/15 MySQL
nginx设置资源请求目录的方式详解
2022/05/30 Servers