我正在使用facebook身份验证,并希望将用户头像从url保存到服务器上的文件夹。用户头像存储在我的变量${picture}
await mkdir(`${dir}/dist/users/${insertId}`)
if (!facebookLogin) {
fs.createReadStream(`${dir}/dist/images/users.jpg`).pipe(
fs.createWriteStream(`${dir}/dist/users/${insertId}/avatar.jpg`)
)
}
else {
fs.createReadStream(`${picture}`).pipe(
fs.createWriteStream(`${dir}/dist/users/${insertId}/avatar.jpg`)
)
}
不起作用的部分位于ELSE LOOP(facebook登录用户)fs.createReadStream('${picture}')
中,因为这试图从C:\xampp\htdocs\https:\platform-lookaside.fbsbx.com\platform\profilepic\?..........
感染它。
我希望它直接从https:\platform-lookaside.fbsbx.com\platform\profilepic\?.............
复制
也许我不应该使用fs.createReadStream,因为图像现在位于url中。如何更改此设置以将图像从url复制到服务器?
答案 0 :(得分:1)
如果使用请求模块怎么办? (https://github.com/request/request)
由于请求的响应也是一个流,因此可以使用fs中的相同方法在服务器上写入映像。
然后,我想它会起作用:
使用请求lib:request(picture).pipe(fs.createWriteStream(${dir}/dist/users/${insertId}/avatar.jpg
))
使用来自节点(https://nodejs.org/api/http.html)的本地http模块:
var http = require('http');
var fs = require('fs');
var request = http.get(picture, function(res){
var imageData = '';
res.setEncoding('binary');
res.on('data', function(chunk){
imagedata += chunk;
});
res.on('end', function(){
fs.writeFile(`${dir}/dist/users/${insertId}/avatar.jpg`, imagedata, 'binary', function(err){
if (err) throw err;
//Here the file was saved
})
})
})