Лучшие практики при хранении мультимедийных сообщений SQL DB - PullRequest
0 голосов
/ 06 мая 2019

Я искал 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. Как хранить HTML таким образом, чтобы предотвратить XSS (межсайтовый скриптинг)?Должен ли я просто избегать всего таким образом, чтобы его можно было читать в HTML как внешний интерфейс?
  2. Допустим, это приложение является мобильным приложением.Это означает, что мне придется либо создать свой собственный анализатор HTML, либо найти для него существующую библиотеку.

Так что же лучше для этого делать?

Я постоянно вижу этот тип функций, так что же используют эти люди (например, Facebook, Google и т. Д.)?

Я не только столкнулся с этой проблемой, но я чувствую, что должен быть хорошийответьте на это в StackOverflow для тех, кто сталкивается с этой проблемой.

В частности, я хочу знать, является ли HTML хорошим вариантом, или я должен рассмотреть что-то еще.На данный момент я планирую использовать обычный HTML и делать открытые URI для объектов Cloud Storage

1 Ответ

2 голосов
/ 06 мая 2019

Не говоря о конкретной реализации, я бы сказал, что вы никогда не захотите вставлять данные изображения / видео в пост.

Это всегда должно быть либо вложение, либо ссылка.

Так что либо вы позволяете пользователю вставлять ссылки в сообщение, либо вы позволяете ему добавлять вложения, которые затем загружаются на сервер, и ссылка на них помещается в сообщение.

Допустим, у вас есть ситуация, когда пользователь помещает изображение / видео / аудио / любые данные в сообщение. В этом случае вы бы инициировали событие, которое загрузит данные в ваше хранилище и поместит ссылку в сообщение, когда это будет сделано. Вот что происходит, когда вы CTRL-C CTRL-V, например, изображение в сообщении GitHub.

Что касается XSS, вы должны удалить вставленные данные из любого javascript и прочего, что вам не нравится, и у вас все должно быть в порядке. Есть много библиотек, которые могут сделать это для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...