使用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 相关文章推荐
Javascript类库的顶层对象名用户体验分析
Oct 24 Javascript
JS的get和set使用示例
Feb 20 Javascript
js或jquery实现页面打印可局部打印
Mar 27 Javascript
JavaScript lastIndexOf方法入门实例(计算指定字符在字符串中最后一次出现的位置)
Oct 17 Javascript
JS实现iframe自适应高度的方法(兼容IE与FireFox)
Jun 24 Javascript
用JS写的一个Ajax库(实例代码)
Aug 06 Javascript
AngularJS中$watch和$timeout的使用示例
Sep 20 Javascript
详解angular部署到iis出现404解决方案
Aug 14 Javascript
Phaser.js实现简单的跑酷游戏附源码下载
Oct 26 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
Nov 29 Javascript
如何解决vue在ios微信&quot;复制链接&quot;功能问题
Mar 26 Javascript
Vue3配置axios跨域实现过程解析
Nov 25 Vue.js
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
PHP调用三种数据库的方法(2)
2006/10/09 PHP
ecshop 订单确认中显示省市地址信息的方法
2010/03/15 PHP
防止本地用户用fsockopen DDOS攻击对策
2011/11/02 PHP
php使用curl和正则表达式抓取网页数据示例
2014/04/13 PHP
PHP数组操作类实例
2015/07/11 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP检查端口是否可以被绑定的方法示例
2018/08/09 PHP
php写入txt乱码的解决方法
2019/09/17 PHP
php设计模式之单例模式用法经典示例分析
2019/09/20 PHP
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
Extjs TriggerField在弹出窗口显示不出问题的解决方法
2010/01/08 Javascript
JavaScript中合并数组的N种方法
2014/09/16 Javascript
JS和JQ的event对象区别分析
2014/11/24 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
在Vue组件中获取全局的点击事件方法
2018/09/06 Javascript
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
解决node.js含有%百分号时发送get请求时浏览器地址自动编码的问题
2019/11/20 Javascript
详解JS深拷贝与浅拷贝
2020/08/04 Javascript
Python 实现数据库更新脚本的生成方法
2017/07/09 Python
Pandas DataFrame 取一行数据会得到Series的方法
2018/11/10 Python
Python单元和文档测试实例详解
2019/04/11 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Python视频编辑库MoviePy的使用
2020/04/01 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
中软Java笔试题
2012/11/11 面试题
财务经理的岗位职责
2013/12/17 职场文书
初一学生期末评语
2014/04/24 职场文书
大专应届毕业生求职信
2014/07/15 职场文书
最美孝心少年事迹材料
2014/08/15 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python