在 Sails JS 中上传和显示图像
Upload and show images in Sails JS
使用 Sails JS 我正在尝试上传图像并在视图中显示它。
问题:
- 图像已上传到 .tmp/uploads,但如何从视图中访问它?
- 有什么方法可以访问图像吗?
- 目录中的图像名称已更改。图片名称可以不改吗?
感谢您能给我的任何帮助。
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.
通过控制器 运行,我仍然可以使用我的策略来控制访问。
使用 Sails JS 我正在尝试上传图像并在视图中显示它。
问题:
- 图像已上传到 .tmp/uploads,但如何从视图中访问它?
- 有什么方法可以访问图像吗?
- 目录中的图像名称已更改。图片名称可以不改吗?
感谢您能给我的任何帮助。
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.
通过控制器 运行,我仍然可以使用我的策略来控制访问。