在Sails.JS中获取Uploaded image的下载URL

时间:2015-01-08 14:43:13

标签: javascript node.js rest file-upload sails.js

我正在使用Sails.js中的Api,我需要通过api将图像上传到服务器并获取上传图像的URL以供以后从Mobile App使用。为此,我的上传代码如下

upload: function  (req, res) {

    var uploadPath = '../../assets/images' ;
    req.file('avatar').upload({ dirname: uploadPath },function onUploadComplete (err, files) {

        if (err) {
            return res.serverError(err);
        } else {
            var image = files[0];
            var fd = image.fd ;
            var index = fd.lastIndexOf('/');
            var imageName = fd.substring(index+1 , fd.length);
            return res.json({ image : '/images/' + imageName });
        }
    });
}

这给我的结果如下......

{
    "image": "/images/bc4f03ec-0d9c-4553-b59a-9ddec427a265.jpg"
}

如果我使用我的localhost附加路径

http://localhost:1337/images/bc4f03ec-0d9c-4553-b59a-9ddec427a265.jpg

它工作正常,图像正在浏览器中加载。但是当我将我的应用程序部署到生产服务器时,它无法正常工作并给我404错误。

为了解决这个问题,我已经编写了另一个这样的get动作

download: function (req, res) {
    res.sendfile(req.path.substr(1));
},

其中/ routes条目是

 'get /images/*' : {
        controller : 'FileController',
        action : 'download'
    }

但那没有帮助,我在localhost获得了404。

任何人都可以建议我如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您似乎遇到grunt问题。您http://example.com/images/中提供的文件实际上位于.tmp / public / images /中,而grunt任务正在将资产文件夹与tmp文件夹同步。

尝试在项目文件夹中运行grunt命令,如果不起作用尝试npm install grunt有时全局npm安装的grunt不起作用。

还要确保grunt可以写入文件夹.tmp;)

这是另外两个可能有帮助的帖子 https://stackoverflow.com/a/20363247/4322950 https://stackoverflow.com/a/20340354/4322950