angular2+nodejs实现图片上传功能


Posted in NodeJs onMarch 27, 2017

在使用angular2进行图片上传的时候,遇到了各种各样的问题。在多番尝试之后最终成功上传图片,下面将我的方法分享给大家:

nodejs 后台代码

var express = require("express");
//网络请求模块
var request = require("request");
//引入nodejs文件系统模块
const fs = require('fs');
//引入body-parser
//包含在请求正文中提交的键/值对数据。 
//默认情况下,它是未定义的,并在使用body-parser中间件时填充。
var bodyParser = require('body-parser');
var app = express();
//解析 application/x-www-form-urlencoded,limit:'20mb'用于设置请求的大小
//解决nodejs Error: request entity too large问题
app.use(bodyParser.urlencoded({ limit:'20mb',extended: true })); 
//设置跨域访问
app.all('*', function(req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
  res.header("Content-Type", "application/json;charset=utf-8");
  next();
});
//上传图片
app.post('/upload',function(req,res){
  var imgData = req.body.url;
  var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
  var dataBuffer = new Buffer(base64Data, 'base64');
  fs.writeFile("image.png", dataBuffer, function(err) {
    if(err){
      res.send(err);
    }else{
      res.send("保存成功!");
    }
  });
})

var server = app.listen(4444, function() {
  console.log('监听端口 4444');
});

angular2前台代码

//上传图片
 /*
 *   let data = {
 *    size: '125422',
 *    type: 'image/jpeg',
 *    name: 'test.jpg',
 *    url: base64
 *   };
 *获取图片的base64码可以通过FileReader获取
 */

 uploadImage(data) {
  return new Promise((resolve, reject) => {
   let headers = new Headers({
    'Content-Type': 'application/x-www-form-urlencoded'
   });
   let options = new RequestOptions({
    headers: headers
   });
   this.http.post("http://localhost:4444/upload", this.toQueryString(data),options)
    .map(res => res.json())
    .subscribe(data => { resolve(data), error => { reject(error) } })
  })
 }


// JSON参数序列化
  private toQueryString(obj) {
   let result = [];
   for (let key in obj) {
    key = encodeURIComponent(key);
    let values = obj[key];
    if (values && values.constructor == Array) {
     let queryValues = [];
     for (let i = 0, len = values.length, value; i < len; i++) {
      value = values[i];
      queryValues.push(this.toQueryPair(key, value));
     }
     result = result.concat(queryValues);
    } else {
     result.push(this.toQueryPair(key, values));
    }
  }
   return result.join('&');
  }
  private toQueryPair(key, value) {
   if (typeof value == 'undefined') {
    return key;
   }
   return key + '=' + encodeURIComponent(value === null ? '' : String(value));
  }

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
nodejs获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
详解nodeJS中读写文件方法的区别
Mar 06 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
基于nodejs+express4.X实现文件下载的实例代码
Jul 13 NodeJs
Nodejs 复制文件/文件夹的方法
Aug 24 NodeJs
nodejs创建简易web服务器与文件读写的实例
Sep 07 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
NodeJS读取分析Nginx错误日志的方法
May 14 NodeJs
分享五个Node.js开发的优秀实践 
Apr 07 NodeJs
深入nodejs中流(stream)的理解
Mar 27 #NodeJs
nodejs学习笔记之路由
Mar 27 #NodeJs
NodeJS处理Express中异步错误
Mar 26 #NodeJs
简单好用的nodejs 爬虫框架分享
Mar 26 #NodeJs
nodejs开发——express路由与中间件
Mar 24 #NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
Mar 24 #NodeJs
NodeJS学习笔记之Module的简介
Mar 24 #NodeJs
You might like
怎样去阅读一份php源代码
2009/08/21 PHP
ThinkPHP5实现作业管理系统中处理学生未交作业与已交作业信息的方法
2016/11/12 PHP
javascript 继承实现方法
2009/08/26 Javascript
分享14个很酷的jQuery导航菜单插件
2011/04/25 Javascript
js setTimeout()函数介绍及应用以倒计时为例
2013/12/12 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
浅析BootStrap模态框的使用(经典)
2016/04/29 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
完美的js图片轮换效果
2017/02/05 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
vue-router3.0版本中 router.push 不能刷新页面的问题
2018/05/10 Javascript
angularjs中判断ng-repeat是否迭代完的实例
2018/09/12 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[41:08]TNC vs VG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
python简单文本处理的方法
2015/07/10 Python
Python外星人入侵游戏编程完整版
2020/03/30 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python实现去除列表中重复元素的方法总结【7种方法】
2019/02/16 Python
numpy 返回函数的上三角矩阵实例
2019/11/25 Python
PyCharm第一次安装及使用教程
2020/01/08 Python
python中有函数重载吗
2020/05/28 Python
CSS3地图动态实例代码(圆圈向外扩散)
2018/06/15 HTML / CSS
甜点店创业计划书
2014/01/27 职场文书
初三学习决心书
2014/03/11 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
物流管理专业推荐信
2014/09/06 职场文书
村委会贫困证明范文
2014/09/21 职场文书
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
Ubuntu安装Mysql+启用远程连接的完整过程
2022/06/21 Servers
Redis Lua脚本实现ip限流示例
2022/07/15 Redis