前几天,有个前端同事遇到这样一个问题,有个图片的URL,使用<img src='ImageURL'></img>
的方式加载图片可以正常显示,但是在浏览器直接访问图片地址,页面会返回一片乱码,他预期的效果是浏览器直接跳到浏下载,这样他就可以在前端写个循环,把他想下载的所有图片下载下来。
我第一直觉,这事在后端做啊,用Node做还不是分分钟,但是我还是随手搜了一下,前端下载图片的方法,大概找到以下两种:
1 |
|
不管是直接访上面的html页面,还是把页面放到web服务器上访问,两种方法都没有试验成功,第一种方法始终报跨域错误,第二种方法浏览器中打开了页面但是没有自动下载。
那还是用Node试试吧,Node的思路很简单
- 发送http请求,在 data 回调中缓存请求返回的数据;
- 在http的 end 事件回调里面把缓存的数据保存成文件;
直接上代码
1 | var http = require("http"); |
一阵惊喜,运行目录出现了aa.png文件,双击打开
这现象有点像是编码问题,Google了一下,确实,需要设置一下请求数据返回的格式和文件存储的格式为二进制,解决办法如下:
1 | // 设置http请求返回数据的格式为二进制 |
完整代码如下:
1 | var http = require("http"); |
总结
- 程序员不要眼高手低,遇到问题要动手试一下,在试的过程中你会遇到意想不到的新问题,不断的解决问题才会有提高;
- 在寻求解决办法的时候你会收获更好的解决办法,比如图片下载其实可以用几行代码就可以实现
1
2
3var fs = require("fs");
var request = require('request');
request(url).pipe(fs.createWriteStream(filename));