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_08_函数对象
Oct 15 Javascript
js实现幻灯片效果(基于jquery插件)
Nov 05 Javascript
AngularJS入门教程之迭代器过滤详解
Aug 18 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 Javascript
Angularjs实现搜索关键字高亮显示效果
Jan 17 Javascript
js实现文字选中分享功能
Jan 25 Javascript
jquery实现页面加载效果
Feb 21 Javascript
详解angularJs中关于ng-class的三种使用方式说明
Jun 02 Javascript
AjaxUpLoad.js实现文件上传
Mar 05 Javascript
Webpack中publicPath路径问题详解
May 03 Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 Javascript
React中的Context应用场景分析
Jun 11 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
截获网站title标签之家内容的例子
2006/10/09 PHP
php的ajax框架xajax入门与试用介绍
2010/12/19 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
轻松掌握php设计模式之访问者模式
2016/09/23 PHP
php求数组全排列,元素所有组合的方法总结
2017/03/14 PHP
PHP操作MySQL中BLOB字段的方法示例【存储文本与图片】
2017/09/15 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
从Ajax到JQuery Ajax学习
2007/02/14 Javascript
jQuery实现的Email中的收件人效果(按del键删除)
2011/03/20 Javascript
读jQuery之五(取DOM元素)
2011/06/20 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
JS编程小常识很有用
2012/11/26 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
javascript定义变量时有var和没有var的区别探讨
2014/07/21 Javascript
JS+CSS实现简易实用的滑动门菜单效果
2015/09/18 Javascript
node.js cookie-parser之parser.js
2016/06/06 Javascript
JS闭包可被利用的常见场景小结
2017/04/09 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
layui 富文本编辑器和textarea值的相互传递方法
2019/09/18 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
深入讲解Python中的迭代器和生成器
2015/10/26 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
django 配置阿里云OSS存储media文件的例子
2019/08/20 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
Python基于Hypothesis测试库生成测试数据
2020/04/29 Python
win10下python3.8的PIL库安装过程
2020/06/08 Python
澳大利亚的奢侈品牌:Oroton
2016/08/26 全球购物
中专自荐信
2013/10/13 职场文书
文秘专业个人求职信
2013/12/22 职场文书
效能监察建议书
2014/05/19 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
实习计划书范文
2015/01/16 职场文书
《正比例》教学反思
2016/02/23 职场文书