如何在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}
文件夹中。那么,我如何将特定用户的所有图像提供给前端应用程序呢?
答案 0 :(得分: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 %>">
<% }) %>