2016-07-04 6 views
3

Я пытаюсь создать предварительно подписанный URL-адрес, который клиент может использовать для загрузки изображения в конкретный ведро S3. Я успешно генерироваться запросы GET-файлы, например, так:Создание предварительно подписанного PUT-url для Amazon S3 с максимальной длиной содержимого

GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, filename); 
urlRequest.setMethod(method); 
urlRequest.setExpiration(expiration); 

где действия и способ Дата и HTTPMethod объектов соответственно.

Теперь я пытаюсь создать URL-адрес, позволяющий пользователям ОТКЛЮЧИТЬ файл, но я не могу понять, как установить максимальную длину содержимого. Я нашел информацию о POST policies, но я бы предпочел использовать PUT здесь - я также хотел бы избежать создания JSON, хотя это не представляется возможным.

Наконец, альтернативный ответ может быть каким-то способом передать загрузку изображения из шлюза API в Lambda, чтобы я мог загрузить его с Lambda на S3 после проверки типа и размера файла (что не идеально).

ответ

1

Хотя мне не удалось ограничить размер файла при загрузке, я закончил создание функции Lambda, которая активируется при загрузке во временное ведро. Функция имеет подпись как ниже

public static void checkUpload(S3EventNotification event) { 

(это известно, потому что все гиды я нашел в Интернете относятся к классу S3Event, который, кажется, не существует больше)

Функция вытягивает метаданные файла (а не сам файл, поскольку это потенциально считается большой загрузкой) и проверяет размер файла. Если это приемлемо, он загружает файл, а затем загружает его в целевой контейнер. Если нет, он просто удаляет файл.

Это далеко не идеальный вариант, так как загрузка, не соответствующая критериям, будет работать, но потом просто не появится (поскольку S3 выдаст код статуса 200 при загрузке без ухода за тем, что ответ Лямбды).

Это скорее обходной путь, чем решение, поэтому я не буду принимать этот ответ.

 Смежные вопросы

  • Нет связанных вопросов^_^