我已经在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格式化消息的格式,但这带来了主要问题:
那么最佳做法是什么?
我经常看到这种功能,那么这些人(例如Facebook,Google等)正在使用什么?
我不仅遇到了这个问题,而且我觉得应该在StackOverflow上为遇到此问题的其他人提供一个很好的答案。
具体地说,我想知道HTML是否是一个不错的选择,或者我是否应该考虑其他因素。就目前而言,我计划使用纯HTML,并为Cloud Storage对象创建公共URI
答案 0 :(得分:2)
不谈论特定的实现,我会说您永远不想在帖子中插入图像/视频数据。
这些应该始终是附件或链接。
因此,您要么让用户在帖子中插入链接,要么让他们添加附件,然后将该附件上载到服务器,并将指向它们的链接放入帖子中。
比方说,您遇到一种情况,用户将图像/视频/音频/任何数据拖放到帖子中。在这种情况下,您将触发一个事件,该事件会将数据上传到存储中,并在完成后将链接放置到帖子中。例如,当您将CTRL-C CTRL-V图像转换为GitHub消息时,就会发生这种情况。
关于XSS,您应该将插入的数据从任何您不喜欢的javascript和内容中删除,并且应该没问题。有很多图书馆可以为您做到这一点。