NodeJs / React App-将图像从URL保存或复制到服务器

时间:2018-08-28 02:34:19

标签: javascript node.js reactjs

我正在使用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复制到服务器?

1 个答案:

答案 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
        })
    })

})