我知道传统的方法是将图像/视频文件存储在一个地方,然后将引用索引保存到数据库表中。
现在我正在学习gundb,我可以很容易地存储键值json类型数据,但由于它是去中心化的,如果我想做一个聊天室应用程序,我应该如何处理图像存储(例如:用户的头像)?
我还想知道是否可以使用gundb制作一个电影共享应用程序?
最佳答案
@Retric,好问题!我不知道为什么人们对你投反对票,他们一定是仇恨者。
你是对的,最好存储该图像/视频并通过 GUN 引用它。特别是对于视频而言,WebTorrent/BitTorrent 进行 P2P 视频共享已有十多年了,一度处理过全局 40% 的互联网流量!
然而,WebTorrent/BitTorrent 不太擅长发现/共享这些 URI(磁力链接等),但 GUN 可以。所以我建议将其作为一种选择。
对于图像,尤其是像头像/图标/个人资料这样的小图像,我经常通过 Base64
编码将它们直接存储在 GUN 中(世界各地的许多网站将图像/图标/ Sprite /头像内联到带有 base64 数据 URL 的 CSS 文件,但现在您可以使用 GUN 来实现此目的)。
如果您对此感兴趣,我使用 jQuery 编写了一个小实用程序,可以让您将图像拖放到您的网站中,它会自动调整大小(传递选项以覆盖它)并对其进行 Base64 编码,然后保存到枪:
https://github.com/amark/gun/blob/master/lib/upload.js
这是我如何使用它的一个小例子:
$('#profile').upload(function resize(e, up){
if(e.err){ return } // handle error
$('#profile').addClass('pulse'); // css to indicate image processing
if(up){ return up.shrink(e, resize, 64) } // pass it `e` drag&drop/upload event, then I reuse the current function (named resize) as the callback for it, and tell it resize to 64px.
$('#profile').removeClass('pulse'); // css indicate done processing.
$("#profile img").attr('src', e.base64).removeClass('none'); // set photo in HTML!
gun.user().get('who').get('face').get('small').put(e.base64); // save profile thumbnail to GUN
});
最后,如果您不想使用 BitTorrent,可以将视频存储在 GUN 中吗?
我强烈建议使用 HLS 格式在 GUN 中存储视频,这将允许您进行去中心化的实时视频流。它是一种非常简单的格式,甚至可以从静态文件中进行视频流处理,因为它将视频存储在可以流式传输的小块中 - 这与 GUN 完美契合。
已经有一个基于 JS 的 HLS 格式视频播放器:
https://github.com/video-dev/hls.js/
根据演示页面,您可以看到如何存储视频的示例,如 GitHub 上的此处:
https://github.com/video-dev/streams/tree/master/x36xhzz
(如果您单击 m3u8 文件,您会看到它的元数据为 720p 存储在 url_0
文件夹中,该文件夹本身也有子文件)
您可以使用相同的文件夹结构将 HLS 视频文件存储在 GUN 中,而不是将其存储在 BitTorrent 或集中式服务器上 gun.get('videos').get('x36xhzz').get(' url_0').get('url_496').get('193039199_mp4_h264_aac_hd_7.ts').once(function(video_chunk){ passToHLSplayer(video_chunk) })
这样 HLS.js 就可以轻松集成枪。
现在您将拥有 P2P 去中心化视频流!!!
更酷的是,您可以将其与 GUN 的 lib/webrtc
适配器结合使用,并完成完全浏览器到浏览器的操作!
我希望这有帮助。
关于javascript - 如何使用gundb存储图像/视频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53789295/