Как правильно настроить S3 для загрузки контента в браузере?

Для подсказок посмотрите на имя имени класса, которое выдает ошибку и номер строки, например: Ошибка компиляции [ERROR] \ applications \ xxxxx.java: [44,30] ошибка: не удается найти символ

Еще одна причина - неподдерживаемый метод для java-версии: jdk7 vs 8. Проверьте свой% JAVA_HOME%

1
задан John Rotenstein 24 March 2019 в 21:37
поделиться

1 ответ

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

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

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

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

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

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

    {"content": "некоторое содержимое"}

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

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

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

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

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

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

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

    0
    ответ дан Thales Minussi 24 March 2019 в 21:37
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: