使用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 相关文章推荐
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
Jun 14 Javascript
jQuery+jRange实现滑动选取数值范围特效
Mar 14 Javascript
jquery 判断div show的状态实例
Dec 03 Javascript
JS使用cookie实现只出现一次的广告代码效果
Apr 22 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
如何抽象一个Vue公共组件
Oct 17 Javascript
Vue源码学习之初始化模块init.js解析
Nov 02 Javascript
Angular5给组件本身的标签添加样式class的方法
Apr 07 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
Feb 26 Javascript
详解vue-cli中使用rem,vue自适应
May 06 Javascript
使用js在layui中实现上传图片压缩
Jun 18 Javascript
javascript函数式编程基础
Sep 15 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
不用GD库生成当前时间的PNG格式图象的程序
2006/10/09 PHP
php中自定义函数dump查看数组信息类似var_dump
2014/01/27 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
php遍历目录方法小结
2015/03/10 PHP
PHP _construct()函数讲解
2019/02/03 PHP
文本框的字数限制功能jquery插件
2009/11/24 Javascript
js对象的复制继承实例
2015/01/10 Javascript
使用javaScript动态加载Js文件和Css文件
2015/10/24 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
2016/01/24 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
滚动条的监听与内容随着滚动条动态加载的实现
2017/02/08 Javascript
微信小程序 登录的简单实现
2017/04/19 Javascript
Vue.js实现实例搜索应用功能详细代码
2017/08/24 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
js操作table中tr的顺序实现上移下移一行的效果
2018/11/22 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
Layui动态生成select下拉选择框不显示的解决方法
2019/09/24 Javascript
[07:38]2014DOTA2国际邀请赛 Newbee顺利挺进胜者组赛后专访
2014/07/15 DOTA
[04:11]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/01/30 DOTA
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
Python实现线程状态监测简单示例
2018/03/28 Python
Linux上使用Python统计每天的键盘输入次数
2019/04/17 Python
使用 Django Highcharts 实现数据可视化过程解析
2019/07/31 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Python Tornado核心及相关原理详解
2020/06/24 Python
python3实现名片管理系统(控制台版)
2020/11/29 Python
保安队长职务说明书
2014/02/23 职场文书
高中生操行评语
2014/04/25 职场文书
勿忘国耻9.18演讲稿(经典篇)
2014/09/14 职场文书
万里长城导游词
2015/01/30 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
opencv检测动态物体的实现
2021/07/21 Python