使用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 相关文章推荐
xml和web特殊字符
Apr 28 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
jquery ui dialog里调用datepicker的问题
Aug 06 Javascript
Jquery中的CheckBox、RadioButton、DropDownList的取值赋值实现代码
Oct 12 Javascript
JavaScript判断按钮被点击的方法
Dec 13 Javascript
Treegrid的动态加载实例代码
Apr 29 Javascript
开启BootStrap学习之旅
May 04 Javascript
AngularJS入门教程之REST和定制服务详解
Aug 19 Javascript
轻松掌握JavaScript装饰者模式
Aug 27 Javascript
微信小程序实现下载进度条的方法
Dec 08 Javascript
详解Node.js一行命令上传本地文件到服务器
Apr 22 Javascript
vue3弹出层V3Popup实例详解
Jan 04 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 购物车的例子
2009/05/04 PHP
php empty,isset,is_null判断比较(差异与异同)
2010/10/19 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
PHP Laravel 上传图片、文件等类封装
2017/08/16 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
js正确获取元素样式详解
2009/08/07 Javascript
Extjs在exlipse中设置自动提示的方法
2010/04/07 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
jQuery事件用法实例汇总
2014/08/29 Javascript
使用FlexiGrid实现Extjs表格效果方法分享
2014/12/16 Javascript
js实现动画特效的文字链接鼠标悬停提示的方法
2015/03/02 Javascript
基于elementUI实现图片预览组件的示例代码
2019/03/31 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
js实现前端界面导航栏下拉列表
2020/08/27 Javascript
python字符串连接方式汇总
2014/08/21 Python
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
django 自定义filter 判断if var in list的例子
2019/08/20 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
python实现猜数字游戏
2020/03/25 Python
如何使用python进行pdf文件分割
2019/11/11 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
详解Windows下PyCharm安装Numpy包及无法安装问题解决方案
2020/06/18 Python
印度网上药店:1mg
2017/10/13 全球购物
美国婚礼和派对礼品网站:Kate Aspen(新娘送礼会、迎婴派对)
2018/03/28 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
Internet主要有哪些网络群组成
2015/12/24 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
公司道歉信范文
2014/01/09 职场文书
抗洪救灾标语
2014/10/08 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
2015年南京大屠杀纪念日活动总结
2015/03/24 职场文书
职位证明模板
2015/06/23 职场文书
《家世》读后感:看家训的力量
2019/12/30 职场文书