javascriptnode.jsfile

How to create a file object with a path in NodeJS?


I want to know if it is possible to create a File object (name, size, data, ...) in NodeJS with the path of an existing file? I know that it is possible client side but I see nothing for NodeJS.

In others words, I want the same function as this that works in NodeJS :

function srcToFile(src, fileName, mimeType){
    return (fetch(src)
        .then(function(res){return res.arrayBuffer();})
        .then(function(buf){return new File([buf], fileName, {type:mimeType});})
    );
}

srcToFile('/images/logo.png', 'logo.png', 'image/png')
.then(function(file){
    console.log(file);
});

And output would be like:

File {name: "logo.png", lastModified: 1491465000541, lastModifiedDate: Thu Apr 06 2017 09:50:00 GMT+0200 (Paris, Madrid (heure d’été)), webkitRelativePath: "", size: 49029, type:"image/png"…}

Solution

  • I searched for File Systems examples and other possibilities and found nothing.

    So I decide to create my own File object with JSON.

      var imagePath = path.join('/images/logo.png', 'logo.png');
        
      if (fs.statSync(imagePath)) {
         var bitmap = fs.readFileSync(imagePath);
         var bufferImage = new Buffer(bitmap);
        
         Magic = mmm.Magic;
         var magic = new Magic(mmm.MAGIC_MIME_TYPE);
         magic.detectFile(imagePath, function(err, result) {
              if (err) throw err;
              datas = [{"buffer": bufferImage, "mimetype": result, "originalname": path.basename(imagePath)}];
              var JsonDatas= JSON.parse(JSON.stringify(datas));
              log.notice(JsonDatas);
         });
     }
    

    The output :

    { 
      buffer:
      { 
        type: 'Buffer',
        data:
        [ 
          255,
          216,
          255
          ... 24908 more items,
          [length]: 25008 
        ] 
      },
      mimetype: 'image/png',
      originalname: 'logo.png' 
    }
    

    I think is probably not the best solution, but it give me what I want. If you have a better solution, you are welcome to suggest it.