在Sails JS上传和显示图像

时间:2015-01-23 10:46:41

标签: javascript node.js sails.js

使用Sails JS我尝试上传图片并在视图中显示。

问题:

  • 图片以.tmp / uploads上传,但如何从视图中访问?
  • 有没有办法访问图片?
  • 图像名称在目录中更改。是否有可能不更改图像名称?

感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:4)

1:如果要在视图中使用该图像,则需要通过将配置对象传递给upload方法并使用dirname属性来更改上传目录:

req.file('image').upload({
  dirname: '../../assets/images/'
}, function(error, uploadedFiles) {
  // do something after file was uploaded...
});

然后,在您看来:

<img src="/images/fileName.jpg">

// Or, if you are using Jade:
img(src='/images/fileName.jpg')

2:我不确定你的意思&#34;访问图像&#34;,但图像将保存在本地磁盘上,可以在.tmp/uploads/或目录中找到以dirname传入的内容。

3:要保留与原始文件名相同的名称,您需要将saveAs属性传递给upload方法的配置对象:

req.file('image').upload({
  saveAs: function(file, cb) {
    cb(null, file.filename);
  }
}, function(err, uploadedFiles) {
  // do something after file was uploaded...
});

您可以在Skipper documentationSails documentation中找到更多详细信息。 Skipper是Sails用于文件上传的模块。

答案 1 :(得分:0)

我有一种不同的处理方法,因为我不会自动想要公开上传的每个文件。

上传文件后,我将其保留在私人位置,然后在&#34;文件&#34;中创建一个记录。包含fd。

的模型

然后我有一条路线:

config/routes.js

'get  /files/:id' : 'FileControllers.stream',

指向我的控制器:

api/controllers/FilesController.js

/**
* serve a file
*
* (GET /file/:id)
*/
stream: function (req, res){

    Files.findOne(req.param('id')).exec(function (err, file){
        if (err) return res.negotiate(err);
        if (!file) return res.notFound();

        if (!file.fileDescriptor) {
            return res.notFound();
        }

        res.sendFile(file.fileDescriptor);
    });
}

Sails documentation中提到了res.sendFile,但在express docs中对此进行了详细说明。

简而言之,res.sendFile:

  

在给定路径上传输文件。设置Content-Type响应   HTTP头字段基于文件名的扩展名。

通过控制器运行它,我仍然可以使用我的策略来指示访问。