【问题标题】:How to serve images in a folder in Sailsjs?如何在 Sailsjs 的文件夹中提供图像?
【发布时间】:2017-05-16 04:57:29
【问题描述】:

如何在sails.js 中提供一堆图片? 假设我的 API 服务器有一个用户控制器,用于上传图像,它存储在服务器中每个用户的文件夹中。

// 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');
         }
      })
  }

});

基本上,图像位置成功保存在User_images模型中,文件保存在assets/images/{userid}文件夹中。那么,如何将特定用户的所有图像提供给前端应用程序?

【问题讨论】:

    标签: javascript node.js sails.js


    【解决方案1】:

    我发现最好的方法是只保存文件名而不是完整的文件描述符。使用上面的代码,您可以使用简单的正则表达式从文件描述符中获取文件名:

    // 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');
         }
      })
      }
    });
    

    现在您可以创建一个控制器,通过传入该用户 id 为特定用户返回图像,我们称之为 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
        })
      });
    },
    

    在 myimages 视图中,您可以遍历图像,将 userId 和文件名附加到图像 src。

    <% _.each(images, function(image) { %>
      <img src="/images/<%= image.userId %>/<%= image.avatarFd %>">
    <% }) %>
    

    【讨论】:

    • 谢谢,我做了一些修改,但我明白了这个想法:D 你只是节省了我的时间。
    • 很高兴我能帮上忙 :)
    猜你喜欢
    • 2012-11-13
    • 2020-10-27
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多