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实现获取当前url地址及url各种参数值
Jun 25 NodeJs
NodeJS整合银联网关支付(DEMO)
Nov 09 NodeJs
NodeJS自定义模块写法(详解)
Jun 27 NodeJs
nodejs密码加密中生成随机数的实例代码
Jul 17 NodeJs
Nodejs 和Session 原理及实战技巧小结
Aug 25 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
修改Nodejs内置的npm默认配置路径方法
May 13 NodeJs
NodeJs 文件系统操作模块fs使用方法详解
Nov 26 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
图解NodeJS实现登录注册功能
Sep 16 NodeJs
nodeJS与MySQL实现分页数据以及倒序数据
Jun 05 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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP一致性hash分布式算法封装类定义与用法示例
2018/08/04 PHP
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
2012/01/04 Javascript
点击页面其它地方隐藏该div的两种思路
2013/11/18 Javascript
JS实现文件动态顺序载入的方法
2015/03/07 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
JS作用域深度解析
2016/12/29 Javascript
JavaScript cookie详解及简单实例应用
2016/12/31 Javascript
JS自动生成动态HTML验证码页面
2017/06/14 Javascript
webpack学习--webpack经典7分钟入门教程
2017/06/28 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
详谈commonjs模块与es6模块的区别
2017/10/18 Javascript
详解vue-cli 本地开发mock数据使用方法
2018/05/29 Javascript
VUE 全局变量的几种实现方式
2018/08/22 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
javascript实现贪吃蛇小游戏
2020/07/28 Javascript
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Pandas 对Dataframe结构排序的实现方法
2018/04/10 Python
Python实现中一次读取多个值的方法
2018/04/22 Python
解决Pycharm下面出现No R interpreter defined的问题
2018/10/29 Python
python 二维数组90度旋转的方法
2019/01/28 Python
5款Python程序员高频使用开发工具推荐
2019/04/10 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Html5 滚动穿透的方法
2019/05/13 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
社会学专业学生职业规划书
2014/02/07 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
环保倡议书范文
2014/05/12 职场文书
初中学习计划书范文
2014/09/15 职场文书