存储多媒体信息SQL DB

时间:2019-05-06 19:12:49

标签: mysql sql database architecture

我已经在StackOverflow上搜索了此问题的答案,但很惊讶地发现很少的信息似乎是很常见的任务

假设我有一个允许用户发布信息的应用。这些帖子当然可以包含文本,但我也希望用户能够插入图像,甚至可以插入视频。

所以这是一个难题。存储这些帖子的第一个想法是制作一个像这样的表:

CREATE TABLE posts(id INTEGER PRIMARY KEY AUTO_INCREMENT, owner VARCHAR(36) NOT NULL, message VARCHAR(MAX), _timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP);


  • id是帖子本身的标识符。
  • owner是创建帖子的人的标识符。
  • message包含消息,为文本。
  • _timestamp代表创建时间。

但是,由于SQL并不是真正用于存储图像和其他文件的,因此图像是在数据库外存储的。例如,假设它们是使用类似于 Google Cloud Storage 的产品存储的。

所以,问题是,如何格式化消息,使其包含指向图像的数据(例如,链接),而不必在前端做太多工作码? (并且不会让用户知道他们除了插入图像以外还做其他任何事情)。

从GitHub和StackOverflow的经验来看,Markdown显然很不错,但并不像我想要的那样友好,并且不能完全按照我想要的方式处理图像。

我已经考虑过使用HTML格式化消息的格式,但这带来了主要问题:

  1. 我应该如何以防止XSS(跨站点脚本)的方式存储HTML?我应该以一种仍然可以在前端将其读取为HTML的方式逃避一切吗?
  2. 假设此应用是移动应用。这意味着我要么必须制作自己的HTML解析器,要么为其找到一个现有的库。

那么最佳做法是什么?

我经常看到这种功能,那么这些人(例如Facebook,Google等)正在使用什么?

我不仅遇到了这个问题,而且我觉得应该在StackOverflow上为遇到此问题的其他人提供一个很好的答案。

具体地说,我想知道HTML是否是一个不错的选择,或者我是否应该考虑其他因素。就目前而言,我计划使用纯HTML,并为Cloud Storage对象创建公共URI

1 个答案:

答案 0 :(得分:2)

不谈论特定的实现,我会说您永远不想在帖子中插入图像/视频数据。

这些应该始终是附件或链接。

因此,您要么让用户在帖子中插入链接,要么让他们添加附件,然后将该附件上载到服务器,并将指向它们的链接放入帖子中。

比方说,您遇到一种情况,用户将图像/视频/音频/任何数据拖放到帖子中。在这种情况下,您将触发一个事件,该事件会将数据上传到存储中,并在完成后将链接放置到帖子中。例如,当您将CTRL-C CTRL-V图像转换为GitHub消息时,就会发生这种情况。

关于XSS,您应该将插入的数据从任何您不喜欢的javascript和内容中删除,并且应该没问题。有很多图书馆可以为您做到这一点。