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 相关文章推荐
splice slice区别
Oct 09 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
Jan 20 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
Dec 28 Javascript
javascript中定义类的方法汇总
Dec 28 Javascript
jquery实现的判断倒计时是否结束代码
Feb 05 Javascript
Jquery跨域获得Json的简单实例
May 18 Javascript
常用的javascript设计模式
Jan 11 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
Feb 18 Javascript
从vue源码解析Vue.set()和this.$set()
Aug 30 Javascript
原生js实现trigger方法示例代码
May 22 Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 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
模板引擎正则表达式调试小技巧
2011/07/20 PHP
php中防止恶意刷新页面的代码小结
2012/10/31 PHP
PHP字符串的递增和递减示例介绍
2014/02/11 PHP
php实现12306余票查询、价格查询示例
2014/04/17 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
JSON PHP中,Json字符串反序列化成对象/数组的方法
2018/05/31 PHP
【消息提示组件】,兼容IE6/7&amp;&amp;FF2
2007/09/04 Javascript
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
Javascript中的isNaN函数使用说明
2011/11/10 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
使用typeof判断function是否存在于上下文
2014/08/14 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
javascript实现下雨效果
2017/03/27 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
vue.js中父组件调用子组件的内部方法示例
2017/10/22 Javascript
JavaScript基于数组实现的栈与队列操作示例
2018/12/22 Javascript
Vue起步(无cli)的啊教程详解
2019/04/11 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
python 读取摄像头数据并保存的实例
2018/08/03 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
pytorch 查看cuda 版本方式
2020/06/23 Python
CSS3制作皮卡丘动画壁纸的示例
2020/11/02 HTML / CSS
html5 Canvas画图教程(6)—canvas里画曲线之arcTo方法
2013/01/09 HTML / CSS
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
公司司机岗位职责
2014/02/07 职场文书
学校标语大全
2014/06/19 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书