angular2+nodejs实现图片上传功能

发布时间 - 2026-01-11 00:23:31    点击率:

在使用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));
  } 

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angular2  # nodejs  # 图片上传  # angularjs客户端实现压缩图片文件并上传实例  # 通过AngularJS实现图片上传及缩略图展示示例  # Angular下H5上传图片的方法(可多张上传)  # AngularJs上传前预览图片的实例代码  # angularjs实现多张图片上传并预览功能  # angularjs点击图片放大实现上传图片预览  # Angularjs上传图片实例详解  # Angularjs实现上传图片预览功能  # AngularJS实现图片上传和预览功能的方法分析  # Angular4实现图片上传预览路径不安全的问题解决  # 上传图片  # 并在  # 它是  # 可以通过  # 给大家  # 文件系统  # 大家多多  # 各种各样  # 情况下  # 序列化  # Requested  # PUT  # true  # Methods  # res  # header  # function  # req  # Origin 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 网站制作大概要多少钱一个,做一个平台网站大概多少钱?  Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用  详解MySQL数据库的安装与密码配置  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  如何快速搭建高效WAP手机网站吸引移动用户?  JavaScript如何实现类型判断_typeof和instanceof有什么区别  jQuery 常见小例汇总  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  edge浏览器无法安装扩展 edge浏览器插件安装失败【解决方法】  mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?  如何在阿里云部署织梦网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  JS去除重复并统计数量的实现方法  如何快速建站并高效导出源代码?  javascript中数组(Array)对象和字符串(String)对象的常用方法总结  bing浏览器学术搜索入口_bing学术文献检索地址  进行网站优化必须要坚持的四大原则  HTML 中动态设置元素 name 属性的正确语法详解  html5如何实现懒加载图片_ intersectionobserver api用法【教程】  详解Oracle修改字段类型方法总结  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  如何用西部建站助手快速创建专业网站?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  高端建站如何打造兼具美学与转化的品牌官网?  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  Android GridView 滑动条设置一直显示状态(推荐)  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  java获取注册ip实例  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  如何在云服务器上快速搭建个人网站?  如何正确下载安装西数主机建站助手?  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  历史网站制作软件,华为如何找回被删除的网站?  如何用已有域名快速搭建网站?  Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】  EditPlus 正则表达式 实战(3)  香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化  Android利用动画实现背景逐渐变暗  如何在建站宝盒中设置产品搜索功能?  如何在IIS7中新建站点?详细步骤解析  Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程  个人网站制作流程图片大全,个人网站如何注销?  Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】  java ZXing生成二维码及条码实例分享