Как лучше всего, чтобы клиент загружал изображение в корзину S3 через Chalice? - PullRequest
0 голосов
/ 12 июня 2018

Я использую Chalice framework для создания службы API.Моим пользователям нужно загрузить изображение, а затем мне нужно сохранить изображение в корзину s3.

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

Пока это мой мыслительный процесс:

BUCKET = <bucket_name>    
@app.route('/n_number_search/', methods=['POST'])
    def n_number_search():
        body = app.current_request.raw_body
        s3_client.upload_file(body, BUCKET, UUID_file_name)
        return Response(body=f'upload successful: {}', status_code=200,
                        headers={'Content-Type': 'text/plain'})

Это не работает.Я рассмотрел способ сделать это в колбе, но синтаксис немного отличается, так как колба имеет атрибут request.files.

1 Ответ

0 голосов
/ 24 июня 2018

Хорошей практикой является использование предварительно подписанного URL .Вот процесс на высоком уровне:

  1. Ваш клиент запрашивает разрешение на загрузку файла
  2. Ваша функция Lambda запущена, генерирует предварительно подписанный URL-адрес (убедитесь, что Lambda необходимразрешения для корзины S3) и ответ клиенту
  3. Клиент берет предварительно подписанный URL-адрес и загружает файл непосредственно в S3;

Преимущества:

  • Уменьшает задержку в сети на , а не загрузка дважды (один раз в Lambda, секунда в S3);

  • Уменьшает ваш счет Lambda: это значительнобыстрее - следовательно, дешевле - создать предварительно подписанный URL-адрес, чем ждать загрузки;

  • Устраняет ошибку при загрузке: лямбда-тайм-аут составляет 5 минут и завершится неудачей, если загрузка займет больше времени (что может произойти, если файл слишком большой или у вашего пользователя плохое подключение к интернету);

...