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 相关文章推荐
让焦点自动跳转
Jul 01 Javascript
jQuery 解析xml文件
Aug 09 Javascript
JavaScript 定义function的三种方式小结
Oct 16 Javascript
JavaScript CSS 修改学习第四章 透明度设置
Feb 19 Javascript
window.location.hash 属性使用说明
Mar 20 Javascript
关于锚点跳转及jQuery下相关操作与插件
Oct 01 Javascript
javascript操作html控件实例(javascript添加html)
Dec 02 Javascript
javascript简单判断输入内容是否合法的方法
May 11 Javascript
JavaScript跨域调用基于JSON的RESTful API
Jul 09 Javascript
浅谈Vue2.0父子组件间事件派发机制
Jan 08 Javascript
解决layui动态添加的元素click等事件触发不了的问题
Sep 20 Javascript
Node使用Nodemailer发送邮件的方法实现
Feb 24 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应用程序实现摘要式身份验证的方法详解
2013/06/08 PHP
PHP echo()函数讲解
2019/02/15 PHP
Laravel模糊查询区分大小写的实例
2019/09/29 PHP
jquery 全局AJAX事件使用代码
2010/11/05 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
JavaScript异步编程:异步数据收集的具体方法
2013/08/19 Javascript
jquery下div 的resize事件示例代码
2014/03/09 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
javascript基于prototype实现类似OOP继承的方法
2015/12/16 Javascript
原生js实现百叶窗效果及原理介绍
2016/04/12 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
antd vue 刷新保留当前页面路由,保留选中菜单,保留menu选中操作
2020/08/06 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
详解django.contirb.auth-认证
2018/07/16 Python
python  Django中的apps.py的目的是什么
2018/10/15 Python
对python 调用类属性的方法详解
2019/07/02 Python
opencv转换颜色空间更改图片背景
2019/08/20 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
浅谈Python 参数与变量
2020/06/20 Python
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
家长给老师的道歉信
2014/01/13 职场文书
授权委托书怎么写
2014/04/03 职场文书
人力资源管理毕业生自荐信
2014/06/26 职场文书
2015年学校办公室主任工作总结
2015/07/20 职场文书
小学生教师节广播稿
2015/08/19 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
2019销售早会主持词
2019/06/27 职场文书
详解Mysql和Oracle之间的误区
2021/05/18 MySQL