使用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 相关文章推荐
代码生成器 document.write()
Apr 15 Javascript
Microsfot .NET Framework4.0框架 安装失败的解决方法
Aug 14 Javascript
jquery放大镜效果超漂亮噢
Nov 15 Javascript
js获取会话框prompt的返回值的方法
Jan 10 Javascript
js实现DOM走马灯特效的方法
Jan 21 Javascript
js使用setTimeout实现定时炸弹的方法
Apr 10 Javascript
Node.js+Express配置入门教程详解
May 19 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
Oct 04 Javascript
微信小程序开发之实现自定义Toast弹框
Jun 08 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
Oct 28 Javascript
node.js使用http模块创建服务器和客户端完整示例
Feb 10 Javascript
如何在postman测试用例中实现断言过程解析
Jul 09 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
PHP5中MVC结构学习
2006/10/09 PHP
PHP二维数组排序的3种方法和自定义函数分享
2014/04/09 PHP
php生成html文件方法总结
2014/12/01 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
微信企业转账之入口类分装php代码
2018/10/01 PHP
深入分析PHP设计模式
2020/06/15 PHP
利用JS判断用户是否上网(连接网络)
2013/12/23 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
js生成动态表格并为每个单元格添加单击事件的方法
2014/04/14 Javascript
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
JavaScript简单表格编辑功能实现方法
2015/04/16 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
javascript如何写热点图
2015/12/08 Javascript
jquery获取文档高度和窗口高度汇总
2016/01/25 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
Vue切换组件实现返回后不重置数据,保留历史设置操作
2020/07/21 Javascript
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
python二维键值数组生成转json的例子
2019/12/06 Python
从训练好的tensorflow模型中打印训练变量实例
2020/01/20 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
2020/03/06 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
浅析几个CSS3常用功能的写法
2014/06/05 HTML / CSS
基于css3 animate制作绚丽的动画效果
2015/11/24 HTML / CSS
什么是重载?CTS、CLS和CLR分别做何解释
2012/05/06 面试题
总监职责范文
2013/11/09 职场文书
党的群众路线教育实践活动学习心得体会
2014/03/03 职场文书
移风易俗倡议书
2014/04/15 职场文书
环境保护与污染治理求职信
2014/07/16 职场文书
五好家庭申报材料
2014/12/20 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
员工开除通知书
2015/04/25 职场文书
利用javaScript处理常用事件详解
2021/04/14 Javascript