我有一个像应用程序pinterest。图像和其他相关信息存储在MongoDb中。通常图像的大小约为1 mb。图像以无限滚动显示。加载base64字符串的长脚本时,浏览器崩溃或响应时间确实很长(特别是对于Internet Explorer) 显示存储在MongoDb中的图像的最佳方式是什么?显示存储在MongoDb中的图像
回答
我想你有这样的应用程序的一些服务器端的一部分吗?为什么不创建一个小API来检索图像?
所以,你的浏览器将拥有约图像信息,并可以要求你的服务器的话,在线路东西http://your_server/api/image/imageID
或http://your_server/images/imagename
,然后你的服务器将只流这张图片,你不需要这些信息存储在文件系统中。
在客户端(浏览器),你只需要实现“延迟加载”。
为什么不用mongodb存储图像? – TeodorKolev
我认为实现这一目标的最好办法,是让你在你的服务器上的一些公用文件夹物理文件。这应该是一种方式,你只需要使用像
你仍可以保持在MongoDB中作为备份您的Base64图像入店,然而,这并不是最好的办法检索您的图像应有的性能问题(如您所见)。我建议你做到以下几点:
每次存储上蒙戈的图像时,请务必将“映像文件”还保存为自身在你的服务器上的一些公共场所。请记住,您应该在您使用的mongo模型上保留该文件的路径。所以,下一次你调用这个对象,而不是得到基本的64位图像时,你只应该得到图像的路径。
比方说,你有你下次就可以查询这个时间模型
myModel = {
name: "some name",
image64: "someextralongstringveryveryveryweird......",
imageUrl: "/images/my/path/to/image/imagename-id.jpg"
}
,您可以使用蒙戈投影只是忽略image64,并在您的客户端,您只需要使用一些HTML标签,使得使用的网址。
<img src="/images/my/path/to/image/imagename-id.jpg">
这将帮助你在性能上有很多。
有一些库,可以帮助您管理的图像文件生成。 ImageMagick是我曾经使用过的并且非常灵活。
为什么不用mongodb存储图像? – TeodorKolev
检索包含文件URL的查询比检索文件本身要快得多,我认为这会以不同的角度回答你的问题https://stackoverflow.com/questions/7703867/storing-image-files-in- mongo-database-it-a-good-idea – Roger
如果您使用的是MongoDB,您应该使用GridFS(http://excellencenodejsblog.com/gridfs-using-mongoose-nodejs/)将数据存储在数据库中,该功能为您的应用程序公开了类似虚拟文件系统的功能。
使用GridFS的,你可以写,从您的MongoDB实例和管道流的请求文件的文件内容,以响应控制器方法。
对于你发布文本文件链接的图像有疑问。干得好 – TeodorKolev
我会建议将图像存储在文件系统上,并使用您的Web服务器来处理向客户端提供服务。 为了提高性能,我会将它们放在CDN - 这将能够处理流量。
在您的应用程序存储(mongo)中,您可以将URL /位置存储到图像中,然后在您的JavaScript代码中检索图像时使用它。
此外,在您的代码中,我会建议通过JavaScript预加载图像,在用户滚动查看图像之前预加载图像。有一些伟大的工具,你可以利用这一点。
在无法更改存储空间的情况下,您必须按照它的方式使用mongo - 我会使用javascript预览图像以预加载图像。
如果我想将它们存储在数据库中,该怎么办? – TeodorKolev
@TeodorKolev,你可以将它们存储在数据库中。我会推荐base64编码二进制文件并将其存储在数据库中。然后,如果需要,可以提供base64映像,或者通过另一个进程将其转换为二进制文件。可能还有一些性能问题需要考虑。 –
你知道一些很好的例子吗? – TeodorKolev
- 1. 显示存储在OPENSHIFT_DATA_DIR中的图像
- 2. 在RecyclerView中显示Firebase存储图像
- 3. 存储和显示图像
- 4. 显示存储在s3存储桶中的图像
- 5. Laravel 5.1 - 显示存储在存储文件夹中的图像
- 6. 显示存储器中的RGBA图像
- 7. 在MongoDB GridFS中存储图像
- 8. 显示图像存储在App_Data文件
- 9. Android - FTP在ImageView中显示图像,但不存储图像中的图像
- 10. 在GridView中显示存储在SD卡中的图像
- 11. 显示作为图库存储在数据库中的图像
- 12. 在MongoDB中存储图形
- 13. 显示存储在Firebase存储中的Firebase数据库中的图像
- 14. 显示存储在浏览器中的目录中的图像
- 15. Node.js - 从MongoDB显示图像
- 16. 无法在Firebase存储中存储的RecyclerView中显示图像(仅限于)
- 17. 从存储laravel显示图像5.3
- 18. 使用LocalFileSystem存储和显示图像
- 19. Richfaces显示图像存储为字节[]
- 20. 显示图像形成数据存储
- 21. 在MySQL中存储图像以在Android中显示listview advice
- 22. 显示存储在MySQL数据库中的图像的问题?
- 23. Doctrine 2 ODM MongoDB从内存中在GridFS中存储图像
- 24. 显示存储为BLOB在SQL Server中的图像
- 25. 显示存储在mysql blob中的图像
- 26. 在JSP中显示文件系统存储的图像
- 27. 如何显示存储在MySql数据库中的BLOB图像?
- 28. 在本地存储的imageview中显示图像
- 29. 在模板中以二进制blob存储的显示图像
- 30. 在Recyclerview中显示来自内部存储器的图像
对图像的base64编码是否有任何要求? Mongo支持二进制数据... –