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 相关文章推荐
列表内容的选择
Jun 30 Javascript
jQuery学习7 操作JavaScript对象和集合的函数
Feb 07 Javascript
JS焦点图切换,上下翻转
May 12 Javascript
解析瀑布流布局:JS+绝对定位的实现
May 08 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
Oct 09 Javascript
JS实现超精简的链接列表在固定区域内滚动效果代码
Nov 04 Javascript
JS截取字符串实例详解
Nov 24 Javascript
Django与Vue语法的冲突问题完美解决方法
Dec 14 Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
Vue开发环境跨域访问问题
Jan 22 Javascript
原生JS封装拖动验证滑块的实现代码示例
Jun 01 Javascript
vuex中遇到的坑,vuex数据改变,组件中页面不渲染操作
Nov 16 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
dede3.1分页文字采集过滤规则详说(图文教程)
2007/04/03 PHP
php后台程序与Javascript的两种交互方式
2009/10/25 PHP
php学习笔记 数组的常用函数
2011/06/13 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
2015/10/08 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
javascript来定义类的规范小结
2010/11/19 Javascript
JS中confirm,alert,prompt函数区别分析
2011/01/17 Javascript
JavaScript中停止执行setInterval和setTimeout事件的方法
2015/05/14 Javascript
微信小程序 页面跳转传递值几种方法详解
2017/01/12 Javascript
Vue指令的钩子函数使用方法
2017/03/20 Javascript
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
angularjs $http调用接口的方式详解
2018/08/13 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
[06:21]完美世界亚洲区首席发行官竺琦TI3采访
2013/08/26 DOTA
pyv8学习python和javascript变量进行交互
2013/12/04 Python
全面理解Python中self的用法
2016/06/04 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
解决Python3.5+OpenCV3.2读取图像的问题
2018/12/05 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
python datetime中strptime用法详解
2019/08/29 Python
python根据时间获取周数代码实例
2019/09/30 Python
python使用beautifulsoup4爬取酷狗音乐代码实例
2019/12/04 Python
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
英国最好的包装供应商:Priory Direct
2019/12/17 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
利用异或运算实现两个无符号数的加法运算
2013/12/20 面试题
领导干部培训感言
2014/01/23 职场文书
2014年幼儿园教师工作总结
2014/11/08 职场文书
慰问信格式规范
2015/03/23 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
OpenCV实现普通阈值
2021/11/17 Java/Android
MySQL数据库查询之多表查询总结
2022/08/05 MySQL