使用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 相关文章推荐
splice slice区别
Oct 09 Javascript
jquery 提示信息显示后自动消失的具体实现
Dec 18 Javascript
一个JavaScript去除字符串末尾的空白实例代码
Sep 22 Javascript
javascript中sort() 方法使用详解
Aug 30 Javascript
关于cookie的初识和运用(js和jq)
Apr 07 Javascript
JS学习之表格的排序简单实例
May 16 Javascript
jQuery检查元素存在性(推荐)
Sep 17 Javascript
微信小程序 UI与容器组件总结
Feb 21 Javascript
layui table 参数设置方法
Aug 14 Javascript
使用ESLint禁止项目导入特定模块的方法步骤
Mar 04 Javascript
JS实现移动端在线签协议功能
Aug 22 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 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
安健A254立体声随身听的分析与打磨
2021/03/02 无线电
php邮件发送,php发送邮件的类
2011/03/24 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
PHP实现的增强性mhash函数
2015/05/27 PHP
php类的定义与继承用法实例
2015/07/07 PHP
PHP 中使用ajax时一些常见错误总结整理
2017/02/27 PHP
PHP使用Redis实现防止大并发下二次写入的方法
2017/10/09 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
2013/12/17 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
js实现的简单图片浮动效果完整实例
2016/05/10 Javascript
jquery手机触屏滑动拼音字母城市选择器的实例代码
2017/12/11 jQuery
详解es6超好用的语法糖Decorator
2018/08/01 Javascript
ES6顶层对象、global对象实例分析
2019/06/14 Javascript
swiper4实现移动端导航切换
2020/10/16 Javascript
JS实现盒子拖拽效果
2020/02/06 Javascript
python 域名分析工具实现代码
2009/07/15 Python
浅谈Python类里的__init__方法函数,Python类的构造函数
2016/12/10 Python
python文件名和文件路径操作实例
2017/09/29 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
2018/12/15 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
毕业留言寄语大全
2014/04/10 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
2015年女生节活动总结
2015/02/27 职场文书
结婚通知短信大全
2015/04/17 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
《落花生》教学反思
2016/02/16 职场文书
2016年圣诞节义工活动总结
2016/04/01 职场文书
涨工资申请书应该怎么写?
2019/07/08 职场文书
Win11 Build 22000.51版本文件资源管理器“命令栏”和上下文菜单有什么新变化?
2021/11/21 数码科技
Win11 Build 22000.829更新补丁KB5015882发布(附更新修复内容汇总)
2022/07/15 数码科技