Как правильно настроить S3 для загрузки контента в браузере? - PullRequest
1 голос
/ 24 марта 2019

Я хочу сделать следующее: пользователь в браузере набирает текст, и после нажатия кнопки «Сохранить» текст должен быть сохранен в файле (например, content.txt) в папке (например,: / username_text) в корне корзины S3.

Кроме того, я хочу, чтобы пользователь мог, когда он посещает ту же страницу, загружать содержимое из S3 и продолжать работу с файлом.Затем, если он / она закончит, снова сохраните файл на S3.

Вероятно, важно упомянуть, но я планирую использовать NodeJS для моего бэкэнда ...

Мой вопрос сейчасявляется: Каков наилучший способ настроить эту функцию хранения и извлечения?Создаю ли я через него шлюз API + лямбда-функцию для получения и получения файлов POST?Или я, например, использую aws-sdk в Node для непосредственного извлечения и извлечения файлов из S3?Или есть лучший способ сделать это?

Я посмотрел следующие два руководства:

  1. Использование AWS S3 Buckets в приложении NodeJS - Codebase -Средний

  2. Загрузка и загрузка изображений из S3 с использованием AWS API Gateway и Lambda

1 Ответ

0 голосов
/ 24 марта 2019

Добро пожаловать в StackOverflow!

Я думаю, что вы слишком беспокоитесь о не столь важных вещах.S3 - это не что иное, как система хранения.Вы могли бы решить хранить содержимое этих файлов в DynamoDB, RDS и т. Д. Что бы вы сделали, если бы хранили их содержимое в этих реальных базах данных?Вы бы взяли данные и отобразили их для пользователя, не так ли?

Это то, что вам нужно сделать с S3!S3 - разумный выбор в вашем сценарии, потому что ваш «файл» может стать очень большим, а S3 - отличным местом для хранения файлов.Однако, по-видимому, вы на самом деле не храните файлы (например, .pdf, .mp4, .mov и т. Д.), Вы, по сути, храните только читаемый человеком текст.

Итак, вот один из способов решения вашей проблемы:

СОДЕРЖАНИЕ ФАЙЛА ФАЙТА

  1. Пользователь входит в систему
  2. Вы получаете личную информацию пользователя на основе некоторого токена.Вы можете сохранить все метаданные в DynamoDB, где с учетом user_id получить все «файлы» от этого пользователя.Эти «файлы» (только метаданные) будут контейнером и ключом для фактического файла на S3.
  3. Вы используете API getObject из S3, чтобы извлечь файл на основе вашего запроса и отобразитьтело вашего файла для вашего пользователя в RESTful способ.Ваш ответ должен выглядеть примерно так:

    {"content": "некоторый контент"}

СОХРАНЕНИЕ ФАЙЛА СОДЕРЖИМОГО

  1. Пользователь входит в систему
  2. Пользователь записывает что-либо в форму и отправляет ее.В своей функции Lambda вы берете содержимое этой формы и обрабатываете ее.Этот запрос должен выглядеть примерно так:

    {"file_id": "some-id", "user_id": "some-id", "content": "some-content"}

  3. Если file_id существует, обновите содержимое в S3.В противном случае загрузите новый файл в S3, а затем создайте новую запись в DynamoDB.Тогда вам, конечно, придется разобраться, если пользователь, отправляющий изменения, действительно владеет файлом, но если вы используете UUID, это не должно быть слишком большой проблемой, но все же стоит проверить в случае утечки идентификаторакаким-то образом.

Таким образом, вам не нужно беспокоиться о загрузке / загрузке файлов, так как это задачи с интенсивным использованием ЦП, поэтому вы можете сохранить свои расходы на низком уровне, а также использовать очень мало ОЗУв ваших функциях (128 МБ должно быть более чем достаточно), в конце концов, вы теперь только текстовые.Это не только упростит ваш способ проектирования, но и упростит как API-шлюз, так и ваш код, поскольку вам не придется иметь дело с двоичными типами.Максимум, что вам нужно сделать, это преобразовать буфер из S3 в строку при передаче некоторого содержимого, но это должно быть вполне нормально.

РЕДАКТИРОВАТЬ

По вашему вопросу относительноследует ли вам загружать его из браузера или нет, я предлагаю вам взглянуть на этот ответ , где я расскажу о плюсах / минусах этого через API Gateway против браузера.

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