在 Sails JS 中上传和显示图像

Upload and show images in Sails JS

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

问题:

感谢您能给我的任何帮助。

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

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:我不确定你所说的 "access the image" 是什么意思,但图像将保存在你的本地磁盘上,可以在 .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 documentation or Sails documentation 中找到更多详细信息。 Skipper 是 Sails 用于文件上传的模块。

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

上传文件后,我将其留在私人位置,并在包含 fd 的 "Files" 模型中创建记录。

然后我有一条路线:

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

res.sendFile在Sails documentation but is fully explained in express docs中提到。

简而言之,res.sendFile:

Transfers the file at the given path. Sets the Content-Type response HTTP header field based on the filename’s extension.

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