使用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 相关文章推荐
写的htc的数据表格
Jan 20 Javascript
很可爱的输入框
Aug 03 Javascript
JavaScript和JQuery实用代码片段(一)
Apr 07 Javascript
JS字符串处理实例代码
Aug 05 Javascript
JavaScript 学习笔记之操作符
Jan 14 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
浅析JavaScript作用域链、执行上下文与闭包
Feb 01 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
Aug 25 Javascript
jquery插件开发之选项卡制作详解
Aug 30 jQuery
用Golang运行JavaScript的实现示例
Nov 25 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 Javascript
浅谈JS的原型和原型链
Jun 04 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
判“新”函数:得到今天与明天的秒数
2006/10/09 PHP
PHP中str_replace函数使用小结
2008/10/11 PHP
PHP如何抛出异常处理错误
2011/03/02 PHP
PHP根据IP地址获取所在城市具体实现
2013/11/27 PHP
PHP静态文件生成类实例
2014/11/29 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
JS实现用户注册时获取短信验证码和倒计时功能
2016/10/27 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
《javascript少儿编程》location术语总结
2018/05/27 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
详解vue页面首次加载缓慢原因及解决方案
2019/11/06 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
[01:19:34]2014 DOTA2国际邀请赛中国区预选赛 New Element VS Dream time
2014/05/22 DOTA
Python里隐藏的“禅”
2014/06/16 Python
简单的抓取淘宝图片的Python爬虫
2014/12/25 Python
python验证码识别的实例详解
2016/09/09 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python学生信息管理系统修改版
2018/03/13 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
2019/08/05 Python
pytorch 实现tensor与numpy数组转换
2019/12/27 Python
通过自学python能找到工作吗
2020/06/21 Python
台湾百利市购物中心:e-Payless
2017/08/16 全球购物
意大利奢侈品购物网站:Giglio
2018/01/05 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
屈臣氏泰国官网:Watsons TH
2021/02/23 全球购物
大学毕业感言一句话
2014/02/06 职场文书
防沙治沙典型材料
2014/05/07 职场文书
社会工作专业求职信
2014/07/15 职场文书
2014年国庆晚会主持词
2014/09/19 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Linux系统下安装PHP7.3版本
2021/06/26 PHP