const koa = require('koa');
const request = require('request');
const fs = require('fs');
const path = require('path');
function requestAsync(url) {
return new Promise((resolve, reject) => {
request({
url: url
}, (err, res, body) => {
if (err) {
reject(err);
} else {
resolve(body);
}
})
});
}
function writeFileAsync(path, data, option) {
return new Promise((resolve, reject) => {
fs.writeFile(path, data, option, (err)=> {
if (err) {
reject(err);
} else {
resolve();
}
})
});
}
const app = new koa();
app.use(async (ctx) => {
let url = 'http://pubimage.360doc.com/index7/bannerl_1.jpg';
let filepath = path.join(__dirname, './images/详情');
filepath = filepath + '/1.jpg';
// request(url).pipe(fs.createWriteStream(filepath));这个可以正常抓取图片
let data = await requestAsync(url);
let buffer = Buffer.from(data);
await writeFileAsync(filepath, buffer);
ctx.type = 'jpg';
ctx.body = buffer;
})
app.listen(3000);
console.log(`starting at ${3000}`);
Saya menulis kedua-dua permintaan dan menulis fail dalam bentuk janji Ia adalah mungkin untuk menangkap html, tetapi bukan imej
Pada mulanya, output data adalah jenis rentetan, iaitu badan permintaan adalah jenis rentetan, jadi saya menggunakan Buffer.from
Menukar kepada jenis penimbal tidak berfungsi, begitu juga menukarnya kepada Buffer.from(data, 'base64'), tetapi hanya menggunakan request(url).pipe(fs.createWriteStream(filepath)) akan berjaya
Sila beritahu saya apa yang silap
/q/10...