- 代码片段
const http = require('http');
const fs = require('fs');
const path = require('path');
const dest = path.join('custom_path', 'filename.extname');
const file = fs.createWriteStream(dest);
http.get(uri, (res)=>{
if(res.statusCode !== 200){
cb(response.statusCode);
return;
}
res.on('end', ()=>{
console.log('finish download');
});
file.on('finish', ()=>{
file.close();
}).on('error', (err)=>{
fs.unlink(dest);
});
res.pipe(file);
});
- 封装callback
const http = require('http');
const fs = require('fs');
function downloadFile(uri, dest, cb){
const file = fs.createWriteStream(dest);
http.get(uri, (res)=>{
if(res.statusCode !== 200){
cb(response.statusCode);
return;
}
res.on('end', ()=>{
console.log('download end');
});
file.on('finish', ()=>{
console.log('finish write file')
file.close(cb);
}).on('error', (err)=>{
fs.unlink(dest);
if(cb) cb(err.message);
})
res.pipe(file);
});
}
- Promise化,支持async, await调用
const http = require('http');
const fs = require('fs');
function downloadFileAsync(uri, dest){
return new Promise((resolve, reject)=>{
const file = fs.createWriteStream(dest);
http.get(uri, (res)=>{
if(res.statusCode !== 200){
reject(response.statusCode);
return;
}
res.on('end', ()=>{
console.log('download end');
});
file.on('finish', ()=>{
console.log('finish write file')
file.close(resolve);
}).on('error', (err)=>{
fs.unlink(dest);
reject(err.message);
})
res.pipe(file);
});
});
}