使用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 触发a链接点击事件解决方案
May 02 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
Feb 23 Javascript
js中一维数组和二位数组中的几个问题示例说明
Jul 17 Javascript
JavaScript实现的一个日期格式化函数分享
Dec 06 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
AngularJS下对数组的对比分析
Aug 24 Javascript
jQuery动态移除和添加背景图片的方法详解
Mar 07 Javascript
微信小程序商城项目之侧栏分类效果(1)
Apr 17 Javascript
Vue2.x中的父子组件相互通信的实现方法
May 02 Javascript
无限循环轮播图之运动框架(原生JS实现)
Oct 01 Javascript
JavaScript实现一个带AI的井字棋游戏源码
May 21 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 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
Php部分常见问题总结
2006/10/09 PHP
Ping服务的php实现方法,让网站快速被收录
2012/02/04 PHP
php 定义404页面的实现代码
2012/11/19 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
php使用递归函数实现数字累加的方法
2015/03/16 PHP
php5.3后静态绑定用法详解
2016/11/11 PHP
JavaScript Perfection kill 测试及答案
2010/03/23 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
javascript下拉框选项单击事件的例子分享
2015/03/04 Javascript
基于JS实现的笛卡尔乘积之商品发布
2016/05/13 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
如何防止INPUT按回车自动提交表单FORM
2016/12/06 Javascript
JavaScript获取URL参数的方法之一
2017/03/24 Javascript
vue resource post请求时遇到的坑
2017/10/19 Javascript
react-native封装插件swiper的使用方法
2018/03/20 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
vue输入节流,避免实时请求接口的实例代码
2019/10/30 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
2018/10/17 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
django Admin文档生成器使用详解
2019/07/22 Python
学python安装的软件总结
2019/10/12 Python
浅谈Python __init__.py的作用
2020/10/28 Python
css3实现波纹特效、H5实现动态波浪效果
2018/01/31 HTML / CSS
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
开工典礼策划方案
2014/05/23 职场文书
个人收入证明范本
2015/06/12 职场文书
python 算法题——快乐数的多种解法
2021/05/27 Python
Python语言内置数据类型
2022/02/24 Python
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android
nginx lua 操作 mysql
2022/05/15 Servers