Для подсказок посмотрите на имя имени класса, которое выдает ошибку и номер строки, например: Ошибка компиляции [ERROR] \ applications \ xxxxx.java: [44,30] ошибка: не удается найти символ
Еще одна причина - неподдерживаемый метод для java-версии: jdk7 vs 8. Проверьте свой% JAVA_HOME%
Добро пожаловать в StackOverflow!
Я думаю, вы слишком беспокоитесь о не столь важных вещах. S3 - это не что иное, как система хранения. Вы могли бы решить хранить содержимое этих файлов в DynamoDB, RDS и т. Д. Что бы вы сделали, если бы хранили их содержимое в этих реальных базах данных? Вы бы взяли данные и отобразили их для пользователя, не так ли?
Это то, что вам нужно сделать с S3! S3 - разумный выбор в вашем сценарии, потому что ваш «файл» может стать очень большим, а S3 - отличным местом для хранения файлов. Однако, по-видимому, вы на самом деле не храните файлы (например, .pdf, .mp4, .mov и т. Д.), Вы, по сути, храните только читаемый человеком текст.
Итак, вот один из подходов к решению вашей проблемы:
ИЗБРАННОЕ СОДЕРЖАНИЕ ФАЙЛА
Вы используете 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, это не должно быть слишком большой проблемой, но все же стоит проверить в случае утечки идентификатора каким-то образом.
Таким образом, вам не нужно беспокоиться о загрузке / загрузке файлов, так как это задачи с интенсивным использованием ЦП, поэтому вы можете сохранить свои расходы на низком уровне, а также использовать очень мало ОЗУ в своих функциях (128 МБ должно быть больше чем достаточно), в конце концов, вы теперь только обслуживаете текст. Это не только упростит ваш способ проектирования, но и упростит как API-шлюз, так и ваш код, поскольку вам не придется иметь дело с двоичными типами. Максимум, что вам нужно сделать, - это преобразовать буфер из S3 в строку при обслуживании некоторого контента, но это должно быть вполне нормально.
РЕДАКТИРОВАТЬ
На ваш вопрос относительно того, стоит ли загружать его из браузера или нет, я предлагаю вам взглянуть на этот ответ , где я освещаю плюсы / минусы этого через API Gateway против браузера.