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命令行参数处理模块commander使用实例
Sep 17 NodeJs
Nodejs爬虫进阶教程之异步并发控制
Feb 15 NodeJs
Nodejs下DNS缓存问题浅析
Nov 16 NodeJs
Nodejs 获取时间加手机标识的32位标识实现代码
Mar 07 NodeJs
mac下的nodejs环境安装的步骤
May 24 NodeJs
nodejs集成sqlite使用示例
Jun 05 NodeJs
深入解析nodejs HTTP服务
Jul 25 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
NodeJS简单实现WebSocket功能示例
Feb 10 NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
nodejs使用node-xlsx生成excel的方法示例
Aug 22 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学习资源和链接.
2006/12/05 PHP
php实现mysql数据库操作类分享
2014/02/14 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
2016/03/01 PHP
详解PHP中websocket的使用方法
2016/09/15 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
JavaScript实现拼音排序的方法
2012/11/20 Javascript
JavaScript 和 Java 的区别浅析
2013/07/31 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
使用javascript实现判断当前浏览器
2015/04/14 Javascript
Bootstrap中的表单验证插件bootstrapValidator使用方法整理(推荐)
2016/06/21 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
JavaScript调试的多个必备小Tips
2017/01/15 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
2017/10/26 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
webpack打包react项目的实现方法
2018/06/21 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
js前端如何写一个精确的倒计时代码
2019/10/25 Javascript
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
python使用7z解压apk包的方法
2015/04/18 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Python中动态创建类实例的方法
2017/03/24 Python
儿童python练习实例
2018/05/27 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
python中取绝对值简单方法总结
2020/07/24 Python
Django REST Framework 分页(Pagination)详解
2020/11/30 Python
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
材料成型专业个人求职信范文
2013/09/25 职场文书
岗位竞聘演讲稿
2014/01/10 职场文书
村干部任职承诺书
2015/01/21 职场文书
毕业生个人自荐书
2015/03/05 职场文书