2017-05-16 1 views
0

Wie man einen Haufen Bilder in sails.js serviert? Angenommen, mein API-Server verfügt über einen Controller für Benutzer, um Bilder hochzuladen, und er wird in jedem Benutzerordner auf dem Server gespeichert.Wie können Bilder in einem Ordner in Sailsjs bereitgestellt werden?

// Image upload 
var userId = req.param('id'); 
req.file('image').upload({ 
    maxBytes: 2000000, 
    // set custom upload dir path name 
    dirname: require('path').resolve(sails.config.appPath, 'assets/images/', userId) 
}, function whenDone(err, uploadedFiles){ 
    if (err) { 
     return res.negotiate(err); 
    } 
    // if no file uploaded, response with error 
    if (uploadedFiles.length === 0) { 
     return res.badRequest('No file'); 
    } else { 
     User_images.create({ 
     userId: userId, 
     avatarFd: uploadedFiles[0].fd 
     }) 
     .exec(function(err, result){ 
     if (err) { 
      return res.serverError(err); 
     } else { 
      return res.ok('image saved'); 
     } 
     }) 
    } 

}); 

Grundsätzlich ist die Bildposition erfolgreich in User_images Modell gespeichert und die Datei in assets/images/{userid} Ordner gespeichert. Wie kann ich also alle Bilder eines bestimmten Benutzers für eine Frontend-Anwendung bereitstellen?

Antwort

1

Ich habe gefunden, der beste Ansatz dafür ist, nur den Dateinamen nicht den vollständigen Dateideskriptor zu speichern. Verwenden Sie den Code über Sie den Dateinamen aus dem Dateideskriptor bekommen kann eine einfache regex:

// Image Upload 
var userId = req.param('id'); 
req.file('image').upload({ 
    maxBytes: 2000000, 
    // set custom upload dir path name 
    dirname: '../../assets/images/'+userId, 
}, function whenDone(err, uploadedFiles){ 
    if (err) { 
    return res.negotiate(err); 
    } 
    // if no file uploaded, response with error 
    if (uploadedFiles.length === 0) { 
    return res.badRequest('No file'); 
    } else { 
    // Get the file descriptor 
    var f = uploadedFiles[0].fd; 
    // return just the filename and use this instead 
    var filename = f.replace(/^.*[\\\/]/, ''); 
    User_images.create({ 
    userId: userId, 
    avatarFd: filename 
    }) 
    .exec(function(err, result){ 
    if (err) { 
     return res.serverError(err); 
    } else { 
     return res.ok('image saved'); 
    } 
    }) 
    } 
}); 

Jetzt können Sie einen Controller erstellen, dass die Benutzer-ID, indem in Bilder für einen bestimmten Benutzer zurückgibt, nennen wir es MyImages:

'myimages' : function (req, res) { 
    var userId = req.param('id'); 
    // find images by userId 
    User_images.find({userId : userId},function (err, images) { 
    if(err) { 
     console.log(err); 
     return res.serverError('An error occured while finding images'); 
    } 
    if(!images){ 
     console.log("No Images Found"); 
     return res.notFound(); 
    } 
    res.view({ 
     images : images 
    }) 
    }); 
}, 

In den MyImages anzuzeigen, können Sie dann durch die Bilder durchlaufen, die Benutzer-ID und der Dateiname das Bild src anhängen.

+0

Danke, ich habe einige Änderungen vorgenommen, aber ich verstehe die Idee: D Sie sparen mir nur meine Stunden. –

+0

Happy Ich könnte helfen :) – Glen

Verwandte Themen