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的动画类 Fx.js
Nov 05 Javascript
AngularJS表单编辑提交功能实例
Feb 13 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
JS+CSS实现仿雅虎另类滑动门切换效果
Oct 13 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
第九篇Bootstrap导航菜单创建步骤详解
Jun 21 Javascript
功能强大的Bootstrap效果展示(二)
Aug 03 Javascript
vue.js表格分页示例
Oct 18 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
May 11 Javascript
基于VUE实现的九宫格抽奖功能
Sep 30 Javascript
react高阶组件添加和删除props
Apr 26 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 设计模式之 工厂模式
2008/12/19 PHP
Symfony实现行为和模板中取得request参数的方法
2016/03/17 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
jquery插件制作 图片走廊 gallery
2012/08/17 Javascript
表单的焦点顺序tabindex和对应enter键提交
2013/01/04 Javascript
运用JQuery的toggle实现网页加载完成自动弹窗
2014/03/18 Javascript
使用jQuery简单实现模拟浏览器搜索功能
2014/12/21 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
require.js的用法详解
2015/10/20 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
2015/10/29 Javascript
JS判断字符串变量是否含有某个字串的实现方法
2016/06/03 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
react开发教程之React 组件之间的通信方式
2017/08/12 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
[34:41]夜魇凡尔赛茶话会 第二期02:你画我猜
2021/03/11 DOTA
python的几种开发工具介绍
2007/03/07 Python
Python中Django框架利用url来控制登录的方法
2015/07/25 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
一文秒懂python读写csv xml json文件各种骚操作
2019/07/04 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
基于python实现matlab filter函数过程详解
2020/06/08 Python
matplotlib基础绘图命令之errorbar的使用
2020/08/13 Python
Python数据分析库pandas高级接口dt的使用详解
2020/12/11 Python
STAUD官方网站:洛杉矶独有的闲适风格
2019/04/11 全球购物
真正的英国宝藏:Mappin & Webb
2019/05/05 全球购物
Bath & Body Works阿联酋:在线购买沐浴和身体用品
2021/02/27 全球购物
比较基础的php面试题及答案-编程题
2012/10/14 面试题
同学会邀请书大全
2014/01/12 职场文书
交通事故协议书范文
2014/10/23 职场文书
答谢词范文
2015/01/05 职场文书
收入证明申请书
2015/06/12 职场文书
2015最新民情日记范文
2015/06/26 职场文书
呐喊读书笔记
2015/06/30 职场文书
javascript之Object.assign()的痛点分析
2022/03/03 Javascript
python在package下继续嵌套一个package
2022/04/14 Python
SQL Server携程核心系统无感迁移到MySQL实战
2022/06/01 SQL Server