Добро пожаловать в StackOverflow!
Я думаю, что вы слишком беспокоитесь о не столь важных вещах.S3 - это не что иное, как система хранения.Вы могли бы решить хранить содержимое этих файлов в DynamoDB, RDS и т. Д. Что бы вы сделали, если бы хранили их содержимое в этих реальных базах данных?Вы бы взяли данные и отобразили их для пользователя, не так ли?
Это то, что вам нужно сделать с S3!S3 - разумный выбор в вашем сценарии, потому что ваш «файл» может стать очень большим, а S3 - отличным местом для хранения файлов.Однако, по-видимому, вы на самом деле не храните файлы (например, .pdf, .mp4, .mov и т. Д.), Вы, по сути, храните только читаемый человеком текст.
Итак, вот один из способов решения вашей проблемы:
СОДЕРЖАНИЕ ФАЙЛА ФАЙТА
- Пользователь входит в систему
- Вы получаете личную информацию пользователя на основе некоторого токена.Вы можете сохранить все метаданные в DynamoDB, где с учетом user_id получить все «файлы» от этого пользователя.Эти «файлы» (только метаданные) будут контейнером и ключом для фактического файла на S3.
Вы используете API getObject
из S3, чтобы извлечь файл на основе вашего запроса и отобразитьтело вашего файла для вашего пользователя в RESTful способ.Ваш ответ должен выглядеть примерно так:
{"content": "некоторый контент"}
СОХРАНЕНИЕ ФАЙЛА СОДЕРЖИМОГО
- Пользователь входит в систему
Пользователь записывает что-либо в форму и отправляет ее.В своей функции Lambda вы берете содержимое этой формы и обрабатываете ее.Этот запрос должен выглядеть примерно так:
{"file_id": "some-id", "user_id": "some-id", "content": "some-content"}
Если file_id существует, обновите содержимое в S3.В противном случае загрузите новый файл в S3, а затем создайте новую запись в DynamoDB.Тогда вам, конечно, придется разобраться, если пользователь, отправляющий изменения, действительно владеет файлом, но если вы используете UUID, это не должно быть слишком большой проблемой, но все же стоит проверить в случае утечки идентификаторакаким-то образом.
Таким образом, вам не нужно беспокоиться о загрузке / загрузке файлов, так как это задачи с интенсивным использованием ЦП, поэтому вы можете сохранить свои расходы на низком уровне, а также использовать очень мало ОЗУв ваших функциях (128 МБ должно быть более чем достаточно), в конце концов, вы теперь только текстовые.Это не только упростит ваш способ проектирования, но и упростит как API-шлюз, так и ваш код, поскольку вам не придется иметь дело с двоичными типами.Максимум, что вам нужно сделать, это преобразовать буфер из S3 в строку при передаче некоторого содержимого, но это должно быть вполне нормально.
РЕДАКТИРОВАТЬ
По вашему вопросу относительноследует ли вам загружать его из браузера или нет, я предлагаю вам взглянуть на этот ответ , где я расскажу о плюсах / минусах этого через API Gateway против браузера.