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 相关文章推荐
javascript 当前日期加(天、周、月、年)
Aug 09 Javascript
JS俄罗斯方块,包含完整的设计理念
Dec 11 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
Ajax异步提交表单数据的说明及方法实例
Jun 22 Javascript
jquery和javascript的区别(常用方法比较)
Jul 04 Javascript
可选择和输入的下拉列表框示例
Nov 05 Javascript
jquery实现的一个简单进度条效果实例
May 12 Javascript
如何在JavaScript中优雅的提取循环内数据详解
Mar 04 Javascript
Vue实现回到顶部和底部动画效果
Jul 31 Javascript
微信小程序搜索框样式并实现跳转到搜索页面(小程序搜索功能)
Mar 10 Javascript
vue实现简单加法计算器
Oct 22 Javascript
vue cli4中mockjs在dev环境和build环境的配置详情
Apr 06 Vue.js
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操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
PHP网站基础优化方法小结
2008/09/29 PHP
php四种定界符详解
2017/02/16 PHP
PHP递归实现快速排序的方法示例
2017/12/18 PHP
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
使用jquery与图片美化checkbox和radio控件的代码(打包下载)
2010/11/11 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
调试Javascript代码(浏览器F12及VS中debugger关键字)
2013/01/25 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
Treegrid的动态加载实例代码
2016/04/29 Javascript
详解JS异步加载的三种方式
2017/03/07 Javascript
详解Vue2 无限级分类(添加,删除,修改)
2017/03/07 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
Vue组件化开发思考
2018/02/02 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
Python批量转换文件编码格式
2015/05/17 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
wx.CheckBox创建复选框控件并响应鼠标点击事件
2018/04/25 Python
python分块读取大数据,避免内存不足的方法
2018/12/10 Python
解决nohup执行python程序log文件写入不及时的问题
2019/01/14 Python
Python一键安装全部依赖包的方法
2019/08/12 Python
Pytorch加载部分预训练模型的参数实例
2019/08/18 Python
python迭代器常见用法实例分析
2019/11/22 Python
python 遍历pd.Series的index和value
2019/11/26 Python
tensorflow的计算图总结
2020/01/12 Python
Pygame的程序开始示例代码
2020/05/07 Python
详解Python中的路径问题
2020/09/02 Python
python安装第三方库如xlrd的方法
2020/10/31 Python
如何一键升级Python所有包
2020/11/05 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
鼓励运动员的广播稿
2014/02/08 职场文书
二年级评语大全
2014/04/23 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
考试作弊检讨书
2015/01/27 职场文书
导游词之金鞭溪风景区
2019/09/12 职场文书