angular.js+node.js实现下载图片处理详解


Posted in Javascript onMarch 31, 2017

前言

本文主要介绍的是angular.js+node.js实现下载图片处理,下载有两种方式,下面话不多说,来看看详细的介绍吧。

第一种:

不指定完整路径,然后发送get给server让server自己去拼接路径,然后用express的res.download来做下载:

Express:

var filePath = path.join(savePath, file[0].name);
console.log('Download file: ' + filePath);
res.download(filePath);

angular:

$http.get(url).success(function (data) {
 var bin = new $window.Blob([data]);

 deferred.resolve(data);

 // Using file-saver library to handle saving work.
 saveAs(bin, toFilename);
})

这种适合于server和用户之间仅仅发送文件名,然后浏览器端构造一个restapi 接口 比如/api/download/xxxxx.png,server自己去找到完整的路径然后发送给用户。

第二种方式:

是不写server代码,而是通过express的static静态文件机制,来发送文件给用户

Express:

app.use('/ocr/uploads', express.static('/data/ocr_img/dev', { maxAge: 86400000 }));

Angular:

$http.get(url, {responseType: 'arraybuffer'}).success(function (data) {

 var bin = new Blob([data], { "type" : "image/png" });

 deferred.resolve({status: '200'});

 saveAs(bin, toFilename);
})

这种适合用户知道server开启静态文件了,那么需要构造完整的相对路径, 比如当前网页的url是/orc, 那么,只要构造url为uploads/xxx.png,那么express会有转到/data/ocr_img/dev/xxx.png,把文件发送回来。

这里要注意:就是图片发送回来的时候,server默认是使用的text/plain方式,而图片需要的是二进制。因此设置{responseType: 'arraybuffer'} ,同时在收到blob数据的时候指定type为new Blob([data],  { "type" : "image/png" } ,这种type也适用于其他图片类型比如pdf jpg bmp tiff等。

图片下载其实就是二进制文件的下载了,具体参考MDN的一个权威文档:

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

再扩展就是这个文档了:

https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest#Receiving_binary_data

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
如何做到打开一个页面,过几分钟自动转到另一页面
Apr 20 Javascript
鼠标经过tr时,改变tr当前背景颜色
Jan 13 Javascript
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
详解JavaScript中void语句的使用
Jun 04 Javascript
jQuery链式调用与show知识浅析
May 11 Javascript
微信小程序开发之入门实例教程篇
Mar 07 Javascript
详解vue过滤器在v2.0版本用法
Jun 01 Javascript
简单的网页广告特效实例
Aug 19 Javascript
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
vue将毫秒数转化为正常日期格式的实例
Sep 16 Javascript
微信小程序实现自动定位功能
Oct 31 Javascript
vue打包npm run build时候界面报错的解决
Aug 13 Javascript
JavaScript函数柯里化原理与用法分析
Mar 31 #Javascript
js实现一个猜数字游戏
Mar 31 #Javascript
微信小程序页面间通信的5种方式
Mar 31 #Javascript
ES6新特性之Symbol类型用法分析
Mar 31 #Javascript
微信小程序 后台登录(非微信账号)实例详解
Mar 31 #Javascript
Vue服务端渲染和Vue浏览器端渲染的性能对比(实例PK )
Mar 31 #Javascript
ES6新特性之Object的变化分析
Mar 31 #Javascript
You might like
PHP 上传文件大小限制
2009/07/05 PHP
php有效防止图片盗用、盗链的两种方法
2016/11/01 PHP
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
javascript中解析四则运算表达式的算法和示例
2014/08/11 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
bootstrap读书笔记之CSS组件(上)
2016/10/17 Javascript
jQuery右下角悬浮广告实例
2016/10/17 Javascript
node.js学习之base64编码解码
2016/10/21 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
webpack4+Vue搭建自己的Vue-cli项目过程分享
2018/08/29 Javascript
浅谈vue引用静态资源需要注意的事项
2018/09/28 Javascript
vue-cli 打包后提交到线上出现 "Uncaught SyntaxError:Unexpected token" 报错
2018/11/06 Javascript
了解重排与重绘
2019/05/29 Javascript
Layui实现带查询条件的分页
2019/07/27 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
vue-router 控制路由权限的实现
2020/09/24 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
[03:17]2016完美“圣”典风云人物:冷冷专访
2016/12/08 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
[01:07:34]DOTA2-DPC中国联赛定级赛 RNG vs Aster BO3第二场 1月9日
2021/03/11 DOTA
Python SQLite3数据库日期与时间常见函数用法分析
2017/08/14 Python
Python编程实现蚁群算法详解
2017/11/13 Python
Python使用指定字符长度切分数据示例
2019/12/05 Python
基于keras中的回调函数用法说明
2020/06/17 Python
Tomcat中怎么使用log4j输出所有的log
2016/07/07 面试题
会计专业导师推荐信
2014/03/08 职场文书
绵山导游词
2015/02/05 职场文书
2015年上半年物业工作总结
2015/03/30 职场文书
责任书格式
2019/04/18 职场文书
交通安全宣传标语(100条)
2019/08/22 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python