从OPENSHIFT_DATA_DIR缓存问题服务图像

时间:2015-08-31 12:21:28

标签: angularjs node.js express openshift

我正在使用OPENSHIFT_DATA_DIR来存储用户上传的图像,因为在部署时不会重写此目录。我有一个符号链接设置用于引用标记中的目录:

app.use('/media', express.static(process.env.OPENSHIFT_DATA_DIR + '/media/'))

然后我可以在标记中使用它:

<img src="media/images/xyz.jpg" />

这在本地很有用,但是,当我部署时,我会在这些图像上获得404,直到我清除浏览器缓存。我怀疑这与它有什么关系,但如果它有帮助,我在前端使用Angular,那些图像路径更像是这样:

<img src="media/images/{{user.profileImage}}" />

我对服务器管理员以及任何帮助/想法/非常感谢的事情知之甚少。

2 个答案:

答案 0 :(得分:3)

@coreydaley指出了我正确的方向,但我想发布我的完整解决方案作为任何发生在这个问题上的人的答案。

我的问题确实是因为我的应用程序跨越齿轮并且这些齿轮不共享公共文件系统,即使在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 });
        });
    }
});

答案 1 :(得分:1)

访问您网站的用户无法直接访问您的OPENSHIFT_DATA_DIR,因为它位于您的网络目录之外。您可能需要在您的Web目录中为OPENSHIFT_DATA_DIR / media文件夹创建一个符号链接,以使其正常工作。此外,如果您使用的是缩放应用程序,则不会在齿轮之间共享文件系统。如果您可以将我们指向具有该问题样本的实际应用程序URL,则会有所帮助。