我使用openshift_data_目录来存储用户上传的图像,因为部署时不会重新编写此目录。我已经设置了一个符号链接,用于引用标记中的目录:
app.use('/media', express.static(process.env.OPENSHIFT_DATA_DIR + '/media/'))
然后我可以在标记中使用它,如下所示:
<img src="media/images/xyz.jpg" />
这在本地非常有效,但是,当我部署时,在清除浏览器缓存之前,我会在这些图像上获得404。我怀疑这和它有什么关系,但如果有帮助的话,我在前端使用角度,这些图像路径更像这样:
<img src="media/images/{{user.profileImage}}" />
我对服务器管理知之甚少,任何帮助/想法/无论什么都非常感激。
最佳答案
@科雷达利给我指出了正确的方向,但我想把我的完整解决方案作为任何遇到这种情况的人的答案。
我的问题确实是因为我的应用程序可以跨Gears扩展,而且这些Gears不共享一个公共文件系统,甚至在openshift_data_dir中也是如此。在研究中我发现了cloudinary。node api非常易于使用,而且它们在其免费计划中提供了大量的存储空间。更不用说那些图像处理工具了,到目前为止,这些工具似乎都在摇摆不定。
我正在做这样的上传:
cloudinary.uploader.upload(req.files.file.path, function (result)
{
if (result)
{
var thumbUrl = cloudinary.url(result.public_id + '.' + result.format, { width: 100, height: 100, crop: 'fill' });
res.json({
success: 1,
successMessage: 'Successfully uploaded file: ' + req.files.file.originalname,
fileName: req.files.file.name,
photoUrl: result.url,
thumbUrl: thumbUrl
});
}
// Using the original filename as cloudinary's public_id
}, { use_filename: true});
在客户端列出我上传的资源,如下所示:
cloudinary.api.resources(function (result)
{
if (result)
{
var files = [];
async.each(result.resources, function (file, next)
{
var thumbUrl = cloudinary.url(file.public_id + '.' + file.format, { width: 100, height: 100, crop: 'fill' });
files.push(thumbUrl);
next();
}, function (err)
{
if (err) console.log(err);
res.json({ success: 1, files: files });
});
}
});