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(三)--- Node.js模块
May 25 NodeJs
nodejs中的fiber(纤程)库详解
Mar 24 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
nodejs修复ipa处理过的png图片
Feb 17 NodeJs
NodeJS基础API搭建服务器详细过程记录
Apr 01 NodeJs
nodejs 子进程正确的打开方式
Jul 03 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
NodeJs实现简单的爬虫功能案例分析
Dec 05 NodeJs
nodejs中方法和模块用法示例
Dec 24 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
Nodejs中怎么实现函数的串行执行
Mar 02 NodeJs
用Nodejs实现在终端中炒股的实现
Oct 18 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/10/09 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
PHP利用MySQL保存session的实现思路及示例代码
2014/09/09 PHP
php实现cookie加密的方法
2015/03/10 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
基于ThinkPHP实现批量删除
2015/12/18 PHP
PHP书写格式详解(必看)
2016/05/23 PHP
PHP实现添加购物车功能
2017/03/06 PHP
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
Javascript 两个窗体之间传值实现代码
2009/09/25 Javascript
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
JSON为什么那样红为什么要用json(另有洞天)
2012/12/26 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
jQuery中prepend()方法使用详解
2015/08/11 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
js调用屏幕宽度的简单方法
2016/11/14 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
js实现全选和全不选
2020/07/28 Javascript
JavaScript字符串转数字的简单实现方法
2020/11/27 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[54:25]Ti4 循环赛第三日LGD vs MOUZ
2014/07/12 DOTA
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
Python:Scrapy框架中Item Pipeline组件使用详解
2017/12/27 Python
python Opencv将图片转为字符画
2021/02/19 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
Python中Selenium模块的使用详解
2020/10/09 Python
整理HTML5中支持的URL编码与字符编码
2016/02/23 HTML / CSS
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
办公室内勤岗位职责范本
2013/12/09 职场文书
求职自荐信怎么写
2014/03/06 职场文书
财务情况说明书范文
2014/05/06 职场文书
物理课外活动总结
2014/08/27 职场文书
MySQL的全局锁和表级锁的具体使用
2021/08/23 MySQL
Python matplotlib绘制条形统计图 处理多个实验多组观测值
2022/04/21 Python