如何在节点中提供静态配置文件图像

时间:2014-01-18 01:08:25

标签: image node.js express user-profile

这实际上更像是“使用什么方法”而不是“使用方法”的问题。我正在使用Express在NodeJS中创建一个站点。因此,每个用户都可以上传profile picture,我关心的是如何路由这些图片的请求。我有几个问题:

  • 如果未指定有效文件,我可以使用express.static()来提供默认文件吗?如果没有,我是否必须为GET指定/img/profile路由并处理FS查询?

  • 如果允许多个文件扩展名,我如何找到正确的图像? (我最初只删除了文件扩展名,无论如何它们都出现在img标签中,是吗?)

  • 我目前正在用他们的用户名命名所有照片。展望未来(对于我可能需要扩展的应用程序),静态用户内容的常规命名约定是什么?大多数存储都引用了引用数据库中内容的UUID吗?

  • 我还有什么可以考虑到我可能还没有考虑到呢?

1 个答案:

答案 0 :(得分:3)

第一个问题:

目前,我建议将图像存储在可预测的位置,可以从数据库条目中的某些列或字段组合中推断出来。其中一个字段或列将是文件名(占不同扩展名)。然后,如果他们没有上传图像,您只需在视图代码中放置对通用“未设置图像”文件的引用。

express.static显然可以服务器静态文件,但当前没有办法提供其他文件,如果你想要的不是那里。因为这听起来很有趣,我对static进行了一些修改以支持您的请求并提交了几个拉取请求(该功能触及了两个不同的模块):

我不知道这些是否会包含在项目中,但是如果你想看到我的叉子有这些变化,它们就在这里:

如果这样,您可以在配置文件图像文件的根目录下安装静态:

app.use(static('<profile image files root>', { fallback: 'anon.jpg'}))

第二个问题

我通常将扩展程序存储在我的数据库中,然后当我加载图片时,我有正确的扩展名以放入src标记的img属性。

第三个问题

如果您可以保证唯一的名称,那么使用它们就可以了。我更喜欢使用您建议的数据库ID或UUID。扫描所有图像上传时,它不太直观,但我很少发现自己这样做。我经常寻找特定的图像,我可以根据需要查找标识符。

第四个问题

您最终可能会将静态内容存储在应用服务器之外(例如,在S3上)。如果发生这种情况,那么当然static对你没有帮助。