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之请求路由概述
Jul 05 NodeJs
nodejs实现bigpipe异步加载页面方案
Jan 26 NodeJs
实例分析nodejs模块xml2js解析xml过程中遇到的坑
Mar 18 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
使用vs code开发Nodejs程序的使用方法
Sep 21 NodeJs
详解使用PM2管理nodejs进程
Oct 24 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
nodejs 日志模块winston的使用方法
May 02 NodeJs
基于nodejs的雪碧图制作工具的示例代码
Nov 05 NodeJs
nodejs提示:cross-device link not permitted, rename错误的解决方法
Jun 10 NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 NodeJs
nodejs和react实现即时通讯简易聊天室功能
Aug 21 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中is_file不能替代file_exists的理由
2014/03/04 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
什么是OneThink oneThink后台添加插件步骤
2016/04/13 PHP
PHP生成图像验证码的方法小结(2种方法)
2016/07/18 PHP
PHP 文件上传后端处理实用技巧方法
2017/01/06 PHP
php 可变函数使用小结
2018/06/12 PHP
在laravel5.2中实现点击用户头像更改头像的方法
2019/10/14 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
Javascript引用指针使用介绍
2012/11/07 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
通过js简单实现将一个文本内容转译成加密文本
2013/10/22 Javascript
js与jQuery 获取父窗、子窗的iframe
2013/12/20 Javascript
jquery中添加属性和删除属性
2015/06/03 Javascript
跟我学习javascript的for循环和for...in循环
2015/11/18 Javascript
用JavaScript动态建立或增加CSS样式表的实现方法
2016/05/20 Javascript
jQuery替换节点用法示例(使用replaceWith方法)
2016/09/08 Javascript
微信小程序 获取二维码实例详解
2017/06/23 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
vue双花括号的使用方法 附练习题
2017/11/07 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
JS实现网页抢购功能(触发,终止脚本)
2017/11/27 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
[18:32]DOTA2 HEROS教学视频教你分分钟做大人-谜团
2014/06/12 DOTA
推荐11个实用Python库
2015/01/23 Python
Python使用numpy实现BP神经网络
2018/03/10 Python
详解python 中in 的 用法
2019/12/12 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
ebookers英国:隶属全球最大的在线旅游公司Expedia
2017/12/28 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
小石潭记导游词
2015/02/03 职场文书
幼儿园小班个人总结
2015/02/12 职场文书
学期个人自我总结
2015/02/13 职场文书
党支部书记岗位职责
2015/02/15 职场文书
名人传读书笔记
2015/06/26 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书