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}`);
Ich habe sowohl die Anfrage als auch die Schreibdatei in Form eines Versprechens geschrieben. Es ist möglich, HTML zu erfassen, aber keine Bilder
Am Anfang ist die Datenausgabe vom Typ String, das heißt, der Hauptteil der Anfrage ist vom Typ String, also verwende ich Buffer.fromDie Konvertierung in den Puffertyp funktioniert nicht, ebenso wenig wie die Änderung in Buffer.from(data, 'base64'), aber die Verwendung von request(url).pipe(fs.createWriteStream(filepath)) reicht aus
Bitte sagen Sie es mir Was ist schief gelaufen
/q/10...