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中使用monk访问mongodb
Jul 06 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodeJS进程管理器pm2的使用
Jan 09 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 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下通过POST还是GET来传值
2008/06/05 PHP
php UTF8 文件的签名问题
2009/10/30 PHP
PHP PDO函数库详解
2010/04/27 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
2018/12/05 PHP
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
Javascript 字符串模板的简单实现
2016/02/13 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
浅谈vue单一组件下动态修改数据时的全部重渲染
2018/03/01 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
vue+axios实现文件下载及vue中使用axios的实例
2018/09/21 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
在Python中使用CasperJS获取JS渲染生成的HTML内容的教程
2015/04/09 Python
python3中bytes和string之间的互相转换
2017/02/09 Python
Python中用psycopg2模块操作PostgreSQL方法
2017/11/28 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python 打印中文字符的三种方法
2018/08/14 Python
Python学习笔记之函数的参数和返回值的使用
2019/11/20 Python
Python内置函数及功能简介汇总
2020/10/13 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
LivingSocial爱尔兰:爱尔兰本地优惠
2018/08/10 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
总监职责范文
2013/11/09 职场文书
通信工程专业求职信
2014/06/04 职场文书
银行授权委托书格式
2014/10/10 职场文书
高中家长意见怎么写
2015/06/03 职场文书
情人节单身感言
2015/08/03 职场文书
中秋节作文(五年级)之关于月亮
2019/09/11 职场文书
Springboot如何同时装配两个相同类型数据库
2021/11/17 Java/Android
golang使用map实现去除重复数组
2022/04/14 Golang
nginx 配置缓存
2022/05/11 Servers