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 相关文章推荐
去掉gridPanel表头全选框的小例子
Jul 18 Javascript
Jquery设置attr的disabled属性控制某行显示或者隐藏
Sep 25 Javascript
3种js实现string的substring方法
Nov 09 Javascript
JavaScript的设计模式经典之代理模式
Feb 24 Javascript
Bootstrap CDN和本地化环境搭建
Oct 26 Javascript
jQuery实现的模拟弹出窗口功能示例
Nov 24 Javascript
JavaScript变量类型以及变量作用域详解
Aug 14 Javascript
详解react-router4 异步加载路由两种方法
Sep 12 Javascript
JS的Ajax与后端交互数据的实例
Aug 08 Javascript
基于ssm框架实现layui分页效果
Jul 27 Javascript
js实现九宫格抽奖
Mar 19 Javascript
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
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
php仿微信红包分配算法的实现方法
2016/05/13 PHP
ko knockoutjs动态属性绑定技巧应用
2012/11/14 Javascript
js验证电话号码与手机支持+86的正则表达式
2014/01/23 Javascript
JS中sort函数排序用法实例分析
2016/06/16 Javascript
jquery自定义表单验证插件
2016/10/12 Javascript
浅谈JavaScript的自动垃圾收集机制
2016/12/15 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
原生js实现下拉框功能(支持键盘事件)
2017/01/13 Javascript
前端开发不得不知的10个最佳ES6特性
2017/08/30 Javascript
javascript字体颜色控件的开发 JS实现字体控制
2017/11/27 Javascript
nodejs 生成和导出 word的实例代码
2018/07/31 NodeJs
vue配置接口域名方法总结
2019/05/12 Javascript
在Koa.js中实现文件上传的接口功能
2019/10/08 Javascript
JavaScript Canvas编写炫彩的网页时钟
2019/10/16 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
python中list列表的高级函数
2016/05/17 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
深入理解Python中的 __new__ 和 __init__及区别介绍
2018/09/17 Python
python判断完全平方数的方法
2018/11/13 Python
python flask安装和命令详解
2019/04/02 Python
对Tensorflow中Device实例的生成和管理详解
2020/02/04 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
基于HTML5 的人脸识别活体认证的实现方法
2016/06/22 HTML / CSS
活动总结怎么写啊
2014/05/07 职场文书
2015年元旦活动总结
2014/05/09 职场文书
调研汇报材料范文
2014/08/17 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
2014最新党员批评与自我批评材料
2014/09/24 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
企业反腐倡廉心得体会
2015/08/15 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
Django操作cookie的实现
2021/05/26 Python
python运行脚本文件的三种方法实例
2022/06/25 Python
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android