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 相关文章推荐
jscript之List Excel Color Values
Jun 13 Javascript
checkbox 多选框 联动实现代码
Oct 22 Javascript
jquery JSON的解析方式
Jul 25 Javascript
img标签中onerror用法
Aug 13 Javascript
js调试工具console.log()方法查看js代码的执行情况
Aug 08 Javascript
js改变style样式和css样式的简单实例
Jun 28 Javascript
JavaScript中定义对象原型的两种使用方法
Dec 15 Javascript
jquery对table做排序操作的实例演示
Aug 10 jQuery
jQuery表单选择器用法详解
Aug 22 jQuery
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 Javascript
Vue路由管理器Vue-router的使用方法详解
Feb 05 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表单处理操作
2017/11/16 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
javascript 解析url的search方法
2010/02/09 Javascript
JavaScript String.replace函数参数实例说明
2013/06/06 Javascript
用JavaScript实现类似于ListBox功能示例代码
2014/03/09 Javascript
使用pjax实现无刷新更改页面url
2015/02/05 Javascript
jQuery实现的简单分页示例
2016/06/01 Javascript
写jQuery插件时的注意点
2017/02/20 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
微信小程序实现皮肤功能(夜间模式)
2017/06/18 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
vue-router命名路由和编程式路由传参讲解
2019/01/19 Javascript
小程序:授权、登录、session_key、unionId的详解
2019/05/15 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
微信小程序实现上传多个文件 超过10个
2020/03/30 Javascript
js 执行上下文和作用域的相关总结
2021/02/08 Javascript
[55:47]DOTA2上海特级锦标赛C组小组赛#2 LGD VS Newbee第三局
2016/02/27 DOTA
使用Python压缩和解压缩zip文件的教程
2015/05/06 Python
Python第三方库的安装方法总结
2016/06/06 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python正则表达式匹配中文用法示例
2017/01/17 Python
Python中那些 Pythonic的写法详解
2019/07/02 Python
对python中不同模块(函数、类、变量)的调用详解
2019/07/16 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
特步官方商城:Xtep
2017/03/21 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
程序运行正确, 但退出时却"core dump"了,怎么回事
2014/02/19 面试题
先进工作者事迹材料
2014/12/23 职场文书
详解Redis主从复制实践
2021/05/19 Redis
Python道路车道线检测的实现
2021/06/27 Python
SQL Server的存储过程与触发器以及系统函数和自定义函数
2022/04/10 SQL Server
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers