Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用GridFS在MongoDB中存储图像_Javascript_Node.js_Mongodb_Rest - Fatal编程技术网

Javascript 使用GridFS在MongoDB中存储图像

Javascript 使用GridFS在MongoDB中存储图像,javascript,node.js,mongodb,rest,Javascript,Node.js,Mongodb,Rest,我正在开发的一个web应用程序功能允许用户上传图像和一些表单数据。我们的工作假设图像文件不会超过16MB,因此可以忽略GridFS(目前) 在React+Flux前端,我使用FileReader对象将图像文件作为二进制字符串读取,然后将其附加到请求对象。这是一个很难看,但它的工作 My Node.js后端接收到所述对象并插入到MongoDB数据存储中。在表示二进制数据的模式中,图像被设置为“BinData”数据类型。当启动检索包含图像Y的文档X的请求时,请求速度很慢,但对于单个文档检索来说是可管

我正在开发的一个web应用程序功能允许用户上传图像和一些表单数据。我们的工作假设图像文件不会超过16MB,因此可以忽略GridFS(目前)

在React+Flux前端,我使用FileReader对象将图像文件作为二进制字符串读取,然后将其附加到请求对象。这是一个很难看,但它的工作

My Node.js后端接收到所述对象并插入到MongoDB数据存储中。在表示二进制数据的模式中,图像被设置为“BinData”数据类型。当启动检索包含图像Y的文档X的请求时,请求速度很慢,但对于单个文档检索来说是可管理的,因为我们只处理一个带有base64编码的缓冲区阵列,该编码在客户端上转换

现在我尝试检索多个这种类型的文档,但是请求花费的时间太长了。要设置上下文,单个请求4个大小约为1MB的文档(约996kb表示图像的二进制数据)大约需要6秒钟

现在很明显,我可以添加分页以减少负载,但从仅4个文档的响应时间开始就像是在打一场艰苦的战斗。在这个问题上似乎没有太多的指导,因为许多Stackoverflow问题与存储图像有关,但实际上没有以合理的速度接收图像

根本的问题是检索多个文档,每个文档包含一个图像。是否有一种直观的方法可以使用当前堆栈存储和接收图像文件,从而缩短响应时间

如果需要对我的实现进行完全重构,对于这种情况,什么是最佳的解决方案?例如,用户上传信息+图像,存储数据,一次跨多个用户检索多个实例


提前感谢。

如果它只显示当前正在使用的代码并坚持解决手头的问题,这将是一个公平的问题。所以它确实缺少上下文的代码。听起来您也在尝试发送所有数据,包括数据包中的图像(确实提到base64编码),这取决于上下文可能不是最佳方法。这个例子是因为大多数浏览器都会缓存内容(比如来自URL的图像),所以最好这样做。但实际情况将受益于一个可行的例子。事实上,我们只是在猜测。标题也可以做一些工作。仅供参考,标题可能是你在问题上最无用的标签之一。所以被移除。这两种方法都不是很有用,因为您可能只使用and标记就击中了大多数观众。@BlakesSeven我已经充分解释了我的问题,因此不需要我的代码,因为上下文设置为其他形式。此外,代码没有问题,因为您忽略了这一事实。@BlakesSeven,我还请求您帮助我如何实现我试图实现的目标,这一点在我的文章末尾已经明确说明。我提供的背景说明了我的解决方案的低效性。仅供参考,我添加了“nosql”标签,这样我就可以扩大我的受众范围,让他们了解如何在nosql数据存储中以最佳方式存储此类文件,因此我不同意您的观点。您是否测量了请求返回浏览器所需的时间,或者图像显示之前的时间?你需要分析你的问题。我猜:因为您使用的是rest,所以您要求浏览器解析一个巨大的JSON blob。。。延迟#1。然后用base64数据创建一些类型的缓冲区,并将它们传递给DOM节点。。。延迟#2。最后,浏览器正在解释base64。由于这不是现代的处理方式,一些浏览器(如FF)不再对此进行优化,我们看到base64的渲染速度很慢。。。延迟#3。