使用express+multer实现node中的图片上传功能


Posted in Javascript onFebruary 02, 2018

下文给大家介绍使用express+multer实现node中的图片上传功能,具体内容介绍如下所示:

在前端中,我们使用ajax来异步上传图片,使用file-input来上传图片,使用formdata对象来处理图片数据,post到服务器中

在node中使用multer中间件来对上传路由接口进行处理

multer文档

package.json

使用express+multer实现node中的图片上传功能

html部分

<body>
<div class="form-group">
    <label>File input:</label>
    <input type="file" name="file" id="file">
    <p id="result"></p>
    <img id="img" src="">
  </div>
  <button id="upload" class="btn btn-default">提交</button>
  </body>

js部分

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
  <script>
    //上传图片的业务逻辑函数
    function uploadFile(){
      //上传图片的input
      var file = document.getElementById("file")
      //因为准备用post提交,又因为图片的内容比较大,所以我们选择使用formdata来承载数据
      //创建formdata对象
      var formData = new FormData();
      //给formdata对象中放入数据(键值对的方式)
      formData.append('file',file.files[0]);
      //提交请求
      $.ajax({
        url: '/upload',//请求路径
        type: 'POST',
        data: formData,
        contentType: false,//为了让浏览器根据传入的formdata来判断contentType
        processData: false,//同上
        success: function(data){
          if(200 === data.code) {
            $('#result').html("上传成功!");
            $('#img').attr('src',data.data);
          } else {
            $('#result').html("上传失败!");
          }
          console.log(2)
        },
        error: function(){
          $("#result").html("与服务器通信发生错误");
        }
      });
      console.log(1)
    }
    //给按钮添加点击事件
    function postPage() {
        //上传按钮
        var uploada = document.getElementById('upload');
        uploada.addEventListener("click",function () {
          uploadFile();
        },false);
    }
    window.onload = function () {
      postPage();
    }
</script>

NodeJS逻辑代码

const http = require('http')
const path = require('path')
const express = require('express')
//是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件
//文档:https://github.com/expressjs/multer/blob/master/doc/README-zh-cn.md
const multer = require('multer')
const app = express()
//配置express的静态目录
app.use(express.static(path.join(__dirname, 'public')));
app.get('/',(req,res)=>{
  res.sendFile(__dirname+'/index.html')
})
//配置diskStorage来控制文件存储的位置以及文件名字等
var storage = multer.diskStorage({
  //确定图片存储的位置
  destination: function (req, file, cb){
    cb(null, './public/uploadImgs')
  },
![](http://images2017.cnblogs.com/blog/1283058/201802/1283058-20180201154342296-515041615.png)
  //确定图片存储时的名字,注意,如果使用原名,可能会造成再次上传同一张图片的时候的冲突
  filename: function (req, file, cb){
    cb(null, Date.now()+file.originalname)
  }
});
//生成的专门处理上传的一个工具,可以传入storage、limits等配置
var upload = multer({storage: storage});
//接收上传图片请求的接口
app.post('/upload', upload.single('file'), function (req, res, next) {
  //图片已经被放入到服务器里,且req也已经被upload中间件给处理好了(加上了file等信息)
  //线上的也就是服务器中的图片的绝对地址
  var url = '/uploadImgs/' + req.file.filename
  res.json({
    code : 200,
    data : url
  })
});
http.createServer(app).listen(3000,()=>{
  console.log('server is listening')
})

自我感觉良好,不知道博客园为什么要给我移除首页....

再发一次,if(delete){
alert('Never publish anything again.')
}else{
alert(1)
}

总结

以上所述是小编给大家介绍的使用express+multer实现node中的图片上传功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
动态调用css文件——jquery的应用
Feb 20 Javascript
JavaScript.The.Good.Parts阅读笔记(一)假值与===运算符
Nov 16 Javascript
解析JavaScript中delete操作符不能删除的对象
Dec 03 Javascript
js报$ is not a function 的问题的解决方法
Jan 20 Javascript
jQuery实现模拟marquee标签效果
Jul 14 Javascript
jQuery防止重复绑定事件的解决方法
May 14 Javascript
ztree实现左边动态生成树右边为内容详情功能
Nov 03 Javascript
ES6学习笔记之map、set与数组、对象的对比
Mar 01 Javascript
在Vue中使用axios请求拦截的实现方法
Oct 25 Javascript
layui table 列宽百分比显示的实现方法
Sep 28 Javascript
JavaScript实现好看的跟随彩色气泡效果
Feb 06 Javascript
Quasar Input:type=&quot;number&quot; 去掉上下小箭头 实现加减按钮样式功能
Apr 09 Javascript
Vue多种方法实现表头和首列固定的示例代码
Feb 02 #Javascript
jquery.picsign图片标注组件实例详解
Feb 02 #jQuery
使用webpack打包koa2 框架app
Feb 02 #Javascript
Vue组件化开发思考
Feb 02 #Javascript
微信小程序实现导航栏选项卡效果
Jun 19 #Javascript
解析Vue.js中的组件
Feb 02 #Javascript
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 #Javascript
You might like
PHPShop存在多个安全漏洞
2006/10/09 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
Laravel中服务提供者和门面模式的入门介绍
2017/11/06 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
js实现简单鼠标跟随效果的方法
2015/04/10 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
jquery精度计算代码 jquery指定精确小数位
2017/02/06 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
Vue-router 类似Vuex实现组件化开发的示例
2017/09/15 Javascript
详解nodejs通过响应回写的方式渲染页面资源
2018/04/07 NodeJs
vue实现简单loading进度条
2018/06/06 Javascript
Vue框架TypeScript装饰器使用指南小结
2019/02/18 Javascript
Vue 无限滚动加载指令实现方法
2019/05/28 Javascript
vue路由教程之静态路由
2019/09/03 Javascript
jQuery设置下拉框显示与隐藏效果的方法分析
2019/09/15 jQuery
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
Django1.9 加载通过ImageField上传的图片方法
2018/05/25 Python
Python登录系统界面实现详解
2019/06/25 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python selenium 执行完毕关闭chromedriver进程示例
2019/11/15 Python
python中xlutils库用法浅析
2020/12/29 Python
html5 application cache遇到的严重问题
2012/12/26 HTML / CSS
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
电气工程师岗位职责
2014/01/01 职场文书
小学生期末评语
2014/04/21 职场文书
财务管理专业求职信
2014/06/11 职场文书
授权委托书公证
2014/09/14 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
《索溪峪的野》教学反思
2016/02/19 职场文书
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android
vue.js 使用原生js实现轮播图
2022/04/26 Vue.js
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫