2017-05-16 7 views
0

sails.jsで画像の束を提供するには? 私のAPIサーバには、ユーザ用のコントローラがあり、画像をアップロードすることができ、サーバの各ユーザのフォルダに格納されているとします。基本的にはSailsjsのフォルダに画像を提供するには?

// 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}フォルダに保存したファイル。では、特定のユーザーのすべての画像をフロントエンドアプリケーションに提供するにはどうすればよいですか?

答えて

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で

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

閲覧、あなたは、画像srcにユーザーIDとファイル名を付加し、画像を反復処理することができます。 Dあなたは私に私の時間を節約 :

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

は、私はいくつかの修正を行っているが、私はアイデアを把握、ありがとうございます。 –

+0

私は助けることができる幸せ:) – Glen

関連する問題