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 相关文章推荐
jQuery 解析xml文件
Aug 09 Javascript
js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
Jul 27 Javascript
Knockoutjs快速入门(经典)
Dec 24 Javascript
学习JavaScript设计模式(策略模式)
Nov 26 Javascript
javascript匀速动画和缓冲动画详解
Oct 20 Javascript
jquery.multiselect多选下拉框实现代码
Nov 11 Javascript
浅谈关于axios和session的一些事
Jul 13 Javascript
js自定义弹框插件的封装
Aug 24 Javascript
在Js页面通过POST传递参数跳转到新页面详解
Aug 25 Javascript
jQuery中过滤器的基本用法示例
Oct 11 jQuery
带你使用webpack快速构建web项目的方法
Nov 12 Javascript
几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
Mar 17 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/03/02 国漫
discuz加密解密函数使用方法和中文注释
2014/01/21 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
Yii框架用户登录session丢失问题解决方法
2017/01/07 PHP
php中curl和soap方式请求服务超时问题的解决
2018/06/11 PHP
JQuery 前台切换网站的样式实现
2009/06/22 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
用jquery仿做发微博功能示例
2014/04/18 Javascript
JS实现title标题栏文字不间断滚动显示效果
2016/09/07 Javascript
Angular在一个页面中使用两个ng-app的方法
2017/02/20 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
详解vue渲染函数render的使用
2017/12/12 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
微信小程序 可搜索的地址选择实现详解
2019/08/28 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
Python smallseg分词用法实例分析
2015/05/28 Python
Python面向对象特殊成员
2017/04/24 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
python版大富翁源代码分享
2018/11/19 Python
python hbase读取数据发送kafka的方法
2018/12/27 Python
Pandas DataFrame数据的更改、插入新增的列和行的方法
2019/06/25 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
Python变量格式化输出实现原理解析
2020/08/06 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
matplotlib常见函数之plt.rcParams、matshow的使用(坐标轴设置)
2021/01/05 Python
美国波西米亚风格服装品牌:Show Me Your Mumu
2018/01/05 全球购物
运动会广播稿60字
2014/01/15 职场文书
办公室主任先进事迹
2014/01/18 职场文书
物理学专业自荐信
2014/06/11 职场文书
口才训练演讲稿范文
2014/09/16 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
党员读书活动心得体会
2016/01/14 职场文书