2016-05-07 30 views
8

Tôi có API REST với API gatewayLambda. Tôi không muốn tạo điểm cuối để tải lên ảnh tiểu sử, chuyển tệp đó đến một hàm Lambda, nơi nó được thay đổi kích thước, đăng ký nó vào cơ sở dữ liệu và trả về đường dẫn url của hình ảnh mới.Tải hình ảnh lên qua cổng API Amazon và lambda

Có cách nào để thực hiện điều đó với các dịch vụ đó không? Không thể tìm thấy bất kỳ thứ gì trực tuyến (gợi ý duy nhất tôi tìm thấy là tải trực tiếp lên S3, yêu cầu quyền IAM và có sự kiện kích hoạt hàm Lambda để thay đổi kích thước hình ảnh).

Cảm ơn

CẬP NHẬT

AWS cập nhật APIGATEWAY và biết bạn có thể send binaries through an endpoint
Nhờ @blue và @Manzo cho ý kiến ​​nó

+2

Cổng API hỗ trợ dữ liệu nhị phân ngay bây giờ ... – Manzo

+1

Có, ví dụ tại đây: https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/ – balu

Trả lời

3

tải lên một tập tin trực tiếp đến S3 không nhất thiết yêu cầu quyền IAM. Bạn sẽ tạo một điểm cuối API trả về một pre-signed S3 URL, sau đó có thể được sử dụng để tải tệp trực tiếp lên S3. Hàm Lambda phía sau điểm cuối API sẽ là thứ duy nhất cần các quyền IAM chính xác cho nhóm S3.

+6

Bạn nói đúng, nhưng tôi có hàm lambda của riêng mình cho phép người dùng, và theo id của anh ta lưu tệp vào nhóm s3. Tôi không cho phép người dùng nhận được url s3 và sau đó tải lên tệp là một ý tưởng hay, điểm của API là trừu tượng hóa logic và cơ sở hạ tầng, người dùng không nên xử lý tất cả những thứ đó hoặc thậm chí biết chúng tôi sử dụng s3 hoặc aws –

1

Vì API Gateway và Lambda không hỗ trợ nguyên bản hiện tại, bạn có thể chuyển tệp vào ảnh trong mã hóa base64 thành API Gateway rồi chuyển đến hàm Lambda. Hàm lambda của bạn có thể được giải mã dựa trên64, sau đó thay đổi kích thước, đăng ký nó vào cơ sở dữ liệu và trả về đường dẫn url của hình ảnh mới.

+0

Cảm ơn. Tôi đã thử những gì bạn nói. Tôi nhận được 'Không thể phân tích cú pháp nội dung yêu cầu thành json: Mã thông báo không được công nhận'. 'request temaplate' của tôi có một mệnh đề:' payload: $ input.body'. Nó sẽ trả về phần thân (tập tin) dưới dạng một chuỗi, nhưng thay vào đó sẽ đưa ra một lỗi. –

+0

Đã sửa lỗi! thêm '$ util.base64Encode()'. Prop trông như thế này: '" payload ":" $ util.base64Encode ($ input.body) "'. –

+0

Bây giờ tôi nhận được một tập tin bị hỏng. Đó là trên 'application/octet-stream', mà tôi không thể thao tác hoặc xác định loại hình ảnh. Bất kỳ giải pháp cho điều đó? –

Các vấn đề liên quan