问题标签 [gridfs-stream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
1008 浏览

express - 使用 multer 和 gridfs 快速上传文件(文件损坏?)

我正在尝试上传文件(图像),上传很好,文件存储在Mongo中,并且与原始文件具有相同的内容类型和相同的大小,然后当我尝试下载它时,文件已损坏但保持相同的内容类型(如果我上传pdf,它被识别为pdf,如果它是png,它也被识别,但我无法打开它们)。我不明白这有什么问题,它非常简单和标准。

对于来自客户端的上传,我使用 angular ng-upload,对于下载,它是对代码中定义的路由的简单 GET 请求。

编辑:该文件已很好地上传到服务器上,所以问题是当我尝试从 GridFS 读取它时。下载的文件比上传的大!所以文件不是原始文件并且已损坏,为什么?

这是我的代码。

0 投票
2 回答
900 浏览

c# - 如何在新的 Mongo 2.X 驱动程序中通过 UUID 获取 GridFS 文件

众所周知,我们可以使用 ObjectId 作为我们的标识符。在我的情况下,我有遗留代码,我们在 MongoDB (UUID) 中使用 GUID 作为标识符。

MongoDB 中 UUID 数据的最佳实践

我在通过UUID从GridFS获取文件时遇到问题。

我使用新的MongoDB.Driver.GridFS包并使用GridFSBucket类。

我想通过 UUID 而不是 ObjectId 获取流,但我可以看到 DownloadToStream(XXX) 方法的所有重载都将ObjectId作为参数。UUID没有过载。

所以,问题是:有什么方法可以安全地将 UUID 转换为 ObjectId 并尝试从 MongoDB 获取文件?

任何帮助将不胜感激。

亚当

0 投票
0 回答
217 浏览

node.js - 使用 GridFS - fs.files 填充个人收藏“文章”

我想使用 GridFS 将文件存储在 MongoDB 中,用于流式传输视频和保存图像等不同目的。这些是猫鼬文档“文章”的一部分。

我正在考虑为每种文件类型“视频”和“缩略图”使用来自 GridFS 的不同存储桶,但我不确定如何创建模式和模型来填充整个集合。

我有这个架构,我想在每个视频和缩略图中填充 fs.files。

问题:

使用“pre”方法存储此集合的逻辑必须在模型中?

我在这里看到了大量示例和相关问题,但都将存储文件的逻辑放在控制器中,而不是在模型中执行。

0 投票
1 回答
160 浏览

javascript - 使用 GraphicsMagick 操作 GridFS 文件并将其存储为新文件

我正在尝试通过gridfs-streamhttps://github.com/aheckmann/gridfs-stream)读取 GridFS 文件,将其旋转 90°gm并将其存储为新的 GridFS 文件。

我的结果看起来很“不时尚”......所以我正在寻求帮助来优化这个小代码片段......

这段代码的第二件事:我需要一种“开关”。此代码对图像进行旋转操作。但我需要传递一个参数来进行旋转、调整大小或其他操作。我该如何整合它?

0 投票
0 回答
738 浏览

safari - 将 mp4 视频流式传输到 Safari

我正在使用 Sails.js 将 GridFS 集合的 mp4 文件流式传输给我的访问者。Chrome 和 Firefox 运行良好,但 Safari 以 Apple 的方式运行 - 或者换句话说 - 它不在那里运行。我只收到消息“加载资源失败”。

对于一些研究,我刚刚将 GridFS 流写入一个文件并将其移动到我的 Sails.js 资产文件夹中,以便在所有浏览器中直接调用它。这工作正常,在 Safari 中也是如此。所以当我流式传输文件时一定有问题,因为 Sails.js 使用“Transfer-Encoding:chunked”。

这是不同的标头响应:

直接请求 mp4 文件 (/test/myvideo.mp4) - 适用于所有浏览器:

请求 GridFS 流 (/videos/files/sdrrer545547568fdsdf3.mp4) - 在 Safari 上不起作用

有人知道 Safari 需要哪些信息才能使其正常工作吗?

// 编辑:在响应字节范围标头后,我现在可以看到我的视频,但是当我打开视频时,Safari 现在会发出一些非常奇怪的请求。这是我记录的一个视频文件的字节范围请求:

0 投票
1 回答
4964 浏览

javascript - 使用 GridFs 从 mongoDB 读取和显示图像

我已经能够使用 GridFs 成功地将图像上传到 mongoDB。以下是我数据库中的图片:

蒙古实验室

fs.文件:

在此处输入图像描述

fs.chunks:

在此处输入图像描述

下面是我用来上传图片的代码:

问题:

我似乎无法弄清楚如何从 mongoDB 读取此图像并将其显示在 HTML<img>标记的前端。

到目前为止我已经尝试过了,但它只显示文件的名称:

我从这里获取了上面的代码

任何人都可以请帮忙。我已经坚持了好几天了!!!!

0 投票
3 回答
4702 浏览

javascript - 显示来自 GridFs (MongoDB) 的图像

我正在使用以下代码使用 GridFs 读取保存在 MongoDB 中的图像文件:

console.log(buff.toString());的输出 是:

console.log(data)的输出;是:

为了显示图像,我这样做了:

我无法从 GridFs MongoDB 中读取和显示 html 中的图像

更新:

我试过这个:

上面的输出是:

在此处输入图像描述

0 投票
1 回答
901 浏览

javascript - 从 mongoDB 读取 PDF 并以 HTML 显示

因此,我成功地将 PDF 上传到 mongoDB,但阅读和显示它是一个问题。

我上传了pdf并通过如下转换来阅读它:

以上给出了以下格式的pdf:

它输出了一大块文本,我只在上面贴了一小块。

我试图像这样显示PDF:

以上没有奏效。我无法显示 pdf 文件。任何线索我怎么能做到这一点?

0 投票
2 回答
2347 浏览

javascript - 坚持将二进制数据更改为 base64 (Gridfs-stream)

我正在尝试将一些二进制数据从我上传的图像更改为 base64,以便我可以使用它来显示图像。但最终给了我这个错误:

我不明白,当我发布时,我也使用 .on 事件,它工作正常。除此之外,我想知道我是否正确更改了数据。

请考虑到我对节点相当陌生:)

我如何保存上传的图像 (POST)

在这里我尝试获取图像并将二进制数据转换为base64(GET)

我检查的资源:

0 投票
0 回答
340 浏览

javascript - 带有 gridfs-stream 的简单视频上传系统适用于直接 iOS 录制,但在从手机图库中选择视频时不适用

我正在尝试使用 gridfs-stream 构建一个非常基本的视频上传系统。它可以在桌面上运行,但只能在我的手机上部分运行(iOS9 iphone 5,使用 Chrome 浏览器)。

它使用 iOS 的直接录制功能完美运行(录制不在照片库中且不保存的视频),但是当我尝试在照片库中选择已保存的视频时,视频无法正确上传。

  • 在写入数据库之前保存到临时目录时,文件为空(大小:0kb)
  • fs.chunks 集合中没有保存任何块
  • fs.files 集合中的“length”属性为 0
  • 它不显示,就像文件不存在一样。

这是代码:

我想过的事情:

  • 使用照片而不是视频确实有效,但我需要我的 web 应用程序才能接收视频。

  • 也许直接录制和从图库中选择视频之间存在差异?我真的不明白,因为除了iOS自动分配的名称外,我看不到任何名称。我试图强制使用特定的 mimetype/编码,但我不确定如何去做,也没有设法让它工作。(老实说,我什至不确定它是如何工作的)

  • 使用其他浏览器:奇怪的是,当使用 Safari 而不是 Chrome 移动设备时,文件在写入数据库之前会正确放入 temp 目录。之后无法正确显示(视频大小不正确,并且有黑色背景占位符,就像视频不存在一样,但我可以右键单击 chrome 检查器中的链接并在新窗口中打开它,导致文件下载。视频没有损坏,文件不是“空的”,数据库中的长度属性也不是从 Chrome 上传时的状态(视频确实有效)

  • 如果有帮助,当使用直接记录功能在 Chrome 上提交我的表单时,它会重新加载页面并且输入为空。从图库中选择文件时,它会花费更多时间,但它不会重新加载页面并且文件仍在输入中,就好像它没有做任何事情一样。加载栏确实出现并停在中间。这是我正在使用的代码。我尝试了多个版本(例如使用 capture 属性),但没有奏效。我正在使用 express-busboy 模块来解码表单的数据。

  • 我尝试使用 connect-busboy 模块而不是 express-busboy (在添加文件之前它不会写入文件,它直接将其流式传输到数据库),但问题仍然存在。

谢谢。