==========request模块实现下载========
***********app.js*************
var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/routes.js');//吧路由引入; ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
routes.router(app);//调用路由
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面
console.log(host);//主机地址
console.log(port);//端口号
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
***********routes.js***************
var router = function(app){
var fs = require("fs");
var request = require('request');
app.get('/one', function(req, res){
//下载图片-------下载网络资源(就是路径是http://开头的)
var img_src = 'http://img.taopic.com/uploads/allimg/120727/201995-120HG1030762.jpg'; //获取图片的url
//采用request模块,向服务器发起一次请求,获取图片资源
request.head(img_src,function(err,res,body){
if(err){
console.log(err);
}
});
var img_filename = 'mu01.jpg';
request(img_src).pipe(fs.createWriteStream('/Users/wofu/Desktop/'+ img_filename));
console.log("第一个网页");
res.send("diyi")
});
};
exports.router = router;
================http.request实现文件下载=========
==============fs.writeFile实现下载图片======
***********app.js***********
var express = require('express');
var app = express();//创建express实例
var routes=require('./routes/routes.js');//吧路由引入; ./ 代表项目的当前总目录 /Users/wofu/Desktop/node
routes.router(app);//调用路由
var server = app.listen(8081, function () {
var host = server.address().address
var port = server.address().port
console.log(__dirname);//这里的目录就是/Users/wofu/Desktop/node,其中node文件夹我是直接放在了桌面
console.log(host);//主机地址
console.log(port);//端口号
console.log("应用实例,访问地址为 http://%s:%s", host, port)
})
***********routes.js**************读取的是服务器本地的资源
var router = function(app){
var fs = require("fs");
app.get('/one', function (req, res) {
console.log("第一个网页");
//读取图片
//第一个参数是下载的资源的url,第二个参数binary(以二进制输出到浏览器,浏览器能自动解析),如果是图片必须设置成binary,否则图片打不开
// 如果是hex(以16进制输出到浏览器,在浏览器显示的是16进制字符串)
//第三个参数是回调函数,data是读取的数据
fs.readFile("/Users/wofu/Desktop/node/temp/1a1f92b4b73412376e2e158bca4021e0","binary",function(err,data){
if(err){
console.log(err);
return;
}else {
res.write(data,"binary");//图片显示在浏览器上
//吧图片保存在本地
//第一个参数是要保存的路径url;第二个是是要保存的数据,第三个参数是以二进制保存,第四个是回调函数
fs.writeFile("/Users/wofu/Desktop/logonew.png", data, "binary", function(err){
if(err){
console.log("down fail");
}
console.log("down success");
});
res.end("");
}
});
});
};
exports.router = router;
*****************fs.createReadStream实现下载******************
下载的是服务器本地的资源;
var stream = fs.createReadStream( "/Users/wofu/Desktop/node/temp/1a1f92b4b73412376e2e158bca4021e0" );//参数是图片资源路径
var responseData = [];//存储文件流
if (stream) {//判断状态
stream.on( 'data', function( chunk ) {
responseData.push( chunk );
});
stream.on( 'end', function() {
var finalData = Buffer.concat( responseData );
res.write( finalData );
//第一个参数是下载下来要存放的位置,第二个参数是图片数据(二进制的),第三个参数必须要binary,第四个是回调函数
fs.writeFile("/Users/wofu/Desktop/logonew02.png", finalData, "binary", function(err){
if(err){
console.log("下载失败");
}
console.log("下载成功");
});
res.end();
});
}
*********视频下载和图片下载类似***************
var stream = fs.createReadStream( "/Users/wofu/Desktop/node/temp/test.mov" );//参数是图片、视频资源路径
var responseData = [];//存储文件流
if (stream) {//判断状态
stream.on( 'data', function( chunk ) {
responseData.push( chunk );
});
stream.on( 'end', function() {
var finalData = Buffer.concat( responseData );
res.write( finalData.toString("base64")); //传给app,base64 必须要是data二进制类型,一般在实际应用中,app吧图片或视频资源转换成data二进制后base64编码成字符串上传资源给服务器,服务器吧二进制数据解析成视频或图片放到一个目录,建立相应的url放到数据库;app取的时候获取到的是url;
//第一个参数是下载下来要存放的位置,第二个参数是图片、视频数据(二进制的),第三个参数必须要binary,第四个是回调函数
fs.writeFile("/Users/wofu/Desktop/logonew02.mov", finalData, "binary", function(err){
if(err){
console.log("下载失败");
}
console.log("下载成功");
});
res.end();
});
}
******************pipe 管道流实现下载*****************下载网路资源
var request = require('request');
var fs =require('fs');
request("https://www.baidu.com/img/baidu_jgylogo3.gif").pipe(fs.createWriteStream("/Users/wofu/Desktop/logonew05.png"));
******************http请求资源**********************
var req = http.get("https://www.baidu.com/img/baidu_jgylogo3.gif", function (res) {
var imgData = "";
res.setEncoding("binary"); //一定要设置response的编码为binary否则会下载下来的图片打不开
res.on("data", function (chunk) {
imgData += chunk;
});
res.on("end", function () {
fs.writeFile("/Users/wofu/Desktop/logonew06.png", imgData, "binary", function (err) {
if (err) {
console.log("保存失败");
}
console.log("保存成功");
});
});
res.on("error", function (err) {
console.log("请求失败");
});
});
******************http请求网络图片,并且base64编码成字符串返回给app*****
var req = http.get("https://www.baidu.com/img/baidu_jgylogo3.gif", function (ress) {
//注意这里的ress和res的区别,这里的ress又是当前的网络请求的响应,res是最外层的网络请求响应
var imgData = "";
ress.setEncoding("binary"); //一定要设置response的编码为binary否则会下载下来的图片打不开
ress.on("data", function (chunk) {
imgData += chunk;
});
ress.on("end", function () {
var st=Buffer.from(imgData,"binary").toString("base64");//吧下载的图片二进制数据放到buffer缓存区,然后转换成base64字符串(base64编码解码都是针对二进制数据);
res.end(st);//发送给app
});
ress.on("error", function (err) {
console.log("请求失败");
});
});