如何在MongoDB中设置缓冲区偏移范围,它不允许在BSON对象中上传超过16MB的文件?

2023-12-10

我的流程和代码:

从表单数据上传图像并将图像的 BSON 字符串存储到数据库,以下是步骤和代码:

  1. 从 multer upload 上传文件
  2. 从文件系统读取文件 - fs
  3. 将图像内容字符串转换为base64字符串
  4. 将base64字符串转换为BSON字符串

配置:

node -v: v12.13.1
npm -v: 6.12.1
fs-extra: ^8.1.0
multer: ^1.4.2

Code:

var upload = multer({ 
    storage: multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, 'uploads')
        },
        filename: function (req, file, cb) {
            cb(null, file.fieldname + '-' + Date.now())
        }
    })
});
upload.single('picture'), (req, res) => {
    
    let imageString = fs.readFileSync(req.file.path);
    let encodeImage = imageString.toString('base64');
    let bufferImage = Buffer.from(encodeImage, 'base64');
    var finalObj = {
        contentType: req.file.mimetype,
        image: bufferImage
    };
    db.collection('filesUpload').insertOne(finalObj, (err, result) => {
        if (err) {
            console.log(err);
        }else{
            console.log('success');
        }
    });

});

什么在起作用?我可以成功上传低于 16MB 的图像,并且可以从数据库中正确读取和检索它。

什么不工作?

我无法上传 16MB 以上的图像。

Error:

RangeError [ERR_OUT_OF_RANGE]: The value of "offset" is out of range. It must be >= 0 && <= 17825792. Received 18646861
at Buffer.write (buffer.js:1019:5)
at serializeObjectId (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:274:14)    at serializeInto (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:935:17)    
at serializeObject (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:347:18)  
at serializeInto (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:727:17)    
at serializeObject (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:347:18)  
at serializeInto (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\parser\serializer.js:941:17)    
at BSON.serialize (D:\api\node_modules\mongodb\node_modules\bson\lib\bson\bson.js:64:28)
at Msg.serializeBson (D:\api\node_modules\mongodb\lib\core\connection\msg.js:126:22)
at Msg.makeDocumentSegment (D:\api\node_modules\mongodb\lib\core\connection\msg.js:118:33)
at Msg.toBin (D:\api\node_modules\mongodb\lib\core\connection\msg.js:104:25)
at serializeCommand (D:\api\node_modules\mongodb\lib\core\connection\pool.js:779:41)
at Pool.write (D:\api\node_modules\mongodb\lib\core\connection\pool.js:927:3)
at _command (D:\api\node_modules\mongodb\lib\core\wireprotocol\command.js:128:10)
at command (D:\api\node_modules\mongodb\lib\core\wireprotocol\command.js:28:5)
at writeCommand (D:\api\node_modules\mongodb\lib\core\wireprotocol\write_command.js:47:3) {
    code: 'ERR_OUT_OF_RANGE'
}

我不知道如何解决这个问题,我认为这是 MongoDB 错误,感谢您的帮助。


这里我用过二进制 JSON called BSON文档,所以在 MongoDB 中存储是有限制的MongoDB 文档:

  • BSON 文档最大大小为 16 MB
  • MongoDB 支持 BSON 文档的嵌套不超过 100 层

另一种替代方法是什么?

GridFS:

  • 定义:

根据 MongoDB 文档MongoDB GridFS 文档:

GridFS 是用于存储和检索超过 BSON 文档大小限制 16 MB 的文件的规范。 GridFS 不支持多文档事务。 GridFS 不是将文件存储在单个文档中,而是将文件划分为多个部分或块,并将每个块存储为单独的文档。

  • API参考:

如果你需要用 NodeJS 来实现,那么 MongoDB 已经提供了文档,这里是MongoDB API 参考文档

  • 堆栈溢出参考:

如果您在实现方面需要任何帮助,请参阅堆栈溢出帖子,这是堆栈溢出参考

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在MongoDB中设置缓冲区偏移范围,它不允许在BSON对象中上传超过16MB的文件? 的相关文章

随机推荐

  • 在 iPhone 上传输音频时是否可以减少背景噪音?

    我们用了一些WebRTC libraries并在测试应用程序中实现它们iPhone 测试应用程序允许使用此应用程序在两部手机之间进行语音通话 类似于 Skype 该应用程序会产生大量背景噪音 比 Skype 或 Line 等其他手机应用程序
  • 从 vb.net 中的命令行获取参数

    是否可以从返回参数processPath在这个例子中 抱歉 这可能更有意义 Dim processName As String Dim processPath As String If processName cmd Then Dim ar
  • IBM MQ 会话断开连接

    我正在创建一个像这样的 MQ 侦听器 它工作正常 但几分钟或几小时后就会因此异常而断开连接 我不控制服务器 这是通过专用电路而不是互联网进行的 我怀疑是网络问题其他服务在同一线路上运行没有问题 MQQueueConnectionFactor
  • CSS:显示:内联块和定位:绝对

    请考虑以下代码
  • 使用C#在远程计算机上执行powershell脚本

    我使用 Microsoft Bot Framework 创建了一个 Bot 应用程序 并希望实现以下目标 无需任何身份验证即可在远程计算机上执行 Powershell 脚本 powershell 脚本将托管在 Azure 或数据库 可能是任
  • 将 CamelCase 转换为 Snake_Case

    需要以下查询的结果 select regexp replace StackOverflow something something as stack overflow 以下正则表达式在每个大写字母前面添加下划线 regexp replace
  • 在seaborn中绘制两列dataFrame

    我正在尝试在seaborn中创建一个条形图 显示数据框中每行 因子 的两个变量 权重 方差 的值 我的数据如下 Factor Weight Variance Growth 10 0 15 Value 20 0 35 这是我的代码 fig p
  • UICollectionView 的可重用性问题

    我曾与UITableView但我从来没有用过UICollectionView在我的应用程序中 所以我想创建UICollectionView以编程方式 以下是我的代码 UICollectionViewFlowLayout layout UIC
  • 常见的 Linq / 标准查询操作符错误/错误步骤?

    对于没有函数式编程背景的程序员来说 有什么错误是需要避免的吗 人们容易犯的最大错误是误解 LINQ 查询的惰性和评估规则 查询是惰性的 在您迭代它们之前它们不会被执行 This does nothing No query executed
  • boost::unique_lock::timed_lock 的用法

    升压 定时锁 void wait int seconds boost this thread sleep boost posix time seconds seconds boost timed mutex mutex void threa
  • 为什么 gcov 报告使用良好的类的头文件覆盖率为 0%?

    我第一次尝试使用以下方法来测量测试覆盖率gcov 现在我已经过了最初的学习曲线 除了一个小障碍之外 一切似乎进展顺利 我希望这可以归结为我缺乏理解 所以我希望熟悉 gcov 的人能够解释发生了什么 问题是我有一个特定的头文件显示 0 覆盖率
  • Go 变量被覆盖(bug?)

    这里有点奇怪 我的问题是 人们运行我的代码会得到与我相同的结果吗 如果你这样做 这是我的代码的错误 我通常是一个Python程序员 还是golang中的错误 系统信息 Go 版本 1 1 2 Linux x64 fedora 19 代码的背
  • Java组合框摆动[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我的表有两个字段 ProductID Primary Key ProductName duplicate values will be present 我已经脸红了productNam
  • 将字符串转换为 DateTime 对象

    我想将特定格式的字符串转换为DateTime 我的具体字符串格式是 dd mm yyyy 我无法进行任何字符串操作 这是我现在的代码 DateTime convertedDate DateTime Parse stringInput 看来你
  • 如何让固定位置的 div 随内容水平滚动?使用 jQuery

    我有一个带有以下 CSS 的 div scroll fixed scroll fixed position absolute top 210px scroll fixed fixed position fixed top 0 当 div 到
  • 如何循环遍历文件中的行块?

    我有一个如下所示的文本文件 其中的行块由空行分隔 ID 1 Name X FamilyN Y Age 20 ID 2 Name H FamilyN F Age 23 ID 3 Name S FamilyN Y Age 13 ID 4 Nam
  • 获取鼠标光标下的 RGB 值

    我正在尝试构建一个程序来检测鼠标光标下方的颜色 然后在屏幕上的窗口中显示颜色和 RGB 值 我对 Java 非常陌生 所以什么都不知道 在朋友的帮助下 我编写了两个代码 第一个获取缓冲图像的特定坐标的 RGB 值 另一个获取用户定义的 RG
  • jQuery animate 在小提琴中工作但在线不流畅

    我制作了一种带有三个扩展 div 的手风琴 a b c 在小提琴中 但是当我将其保存在本地并在浏览 器中打开它时 过渡不再平滑 点击后我特别注意到 b with a扩大了 我已包含引用 CSS 和 JavaScript 代码的 HTML 原
  • 了解 Powershell:示例 - 将 JSON 转换为 CSV

    我读过几篇文章 比如使用 PowerShell 将 JSON 转换为 CSV 关于使用 PowerShell 转换 CSV 我还了解到 在脚本中使用管道语法是一种相对较差的形式 它实际上是用于命令行的 并且随着时间的推移会给开发人员带来维护
  • 如何在MongoDB中设置缓冲区偏移范围,它不允许在BSON对象中上传超过16MB的文件?

    我的流程和代码 从表单数据上传图像并将图像的 BSON 字符串存储到数据库 以下是步骤和代码 从 multer upload 上传文件 从文件系统读取文件 fs 将图像内容字符串转换为base64字符串 将base64字符串转换为BSON字