2016-05-07 36 views
8

API gateway ve Lambda ile bir REST API'm var. Profil resmini yüklemek için bir son nokta oluşturmamaya, bu dosyayı yeniden boyutlandırılan bir Lambda işlevine geçirir, veritabanına kaydeder ve yeni görüntünün URL yolunu döndürür.Amazon API ağ geçidi ve lambda aracılığıyla görüntü yükleme

Bu hizmetlerle bunu yapmanın bir yolu var mı? Çevrimiçi hiçbir şey bulamadık (bulduğum tek öneri, IAM izinlerini gerektiren doğrudan S3'e yükleniyor ve resmi yeniden boyutlandıran bir Lambda işlevini tetikleyen bir olaya sahip oluyor).

Teşekkür

GÜNCELLEME

AWS güncellenmiş APIGATEWAY ve mutlaka send binaries through an endpoint
sayesinde S3 doğrudan bir dosya yükleniyor o

+2

API ağ geçidi artık ikili verileri destekliyor ... – Manzo

+1

Evet, örnek burada: https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/ – balu

cevap

3

yorum için @blue ve @Manzo yapabilirsiniz olmadığını biliyoruz IAM izinlerini gerektirir. Dosyayı doğrudan S3'e yüklemek için kullanılabilecek bir pre-signed S3 URL döndüren bir API son noktası oluşturursunuz. API son noktasının arkasındaki Lambda işlevi, S3 grubu için doğru IAM izinlerine gereksinim duyan tek şey olacaktır.

+6

Haklısın, ama kullanıcıya yetki veren kendi lambda işlevim var ve kimliğine göre dosyayı s3 kovasına kaydediyor. Kullanıcının bir s3 url almasına izin vermeyi ve dosyayı yüklemeyi iyi düşünmüyorum, bir API'nin amacı mantığı ve altyapıyı soyutlamaktır, kullanıcının tüm bu şeyleri işlememesi ve hatta s3 kullandığımızı bilmemesi gerekir. veya aws –

1

API Ağ Geçidi ve Lambda şu anda doğal olarak desteklemediğinden, dosyayı API Ağ Geçidi'ne kodlanmış base64 biçiminde bir resme geçirebilir ve ardından Lambda işlevine geçirebilirsiniz. Lambda işlevinizin kodu 64'ün kodu çözülebilir, sonra yeniden boyutlandırılabilir, veritabanına kaydeder ve yeni görüntünün URL yolunu döndürür.

+0

Teşekkürler. Ne dediğini denedim. Ben alıyorum istek gövdesi json ayrıştırılamadı: Tanınmayan belirteç '. Benim isteğim temaplate, şu propana sahip: 'loadload: $ input.body'. Gövde (dosya) bir dize olarak dönmelidir, ancak bunun yerine bir hata atar. –

+0

Sabit! '$ util.base64Encode()' öğesini ekleyin. Pervane şuna benzer: '' yük ”:" $ util.base64Encode ($ input.body) "'. –

+0

Şimdi bozuk bir dosya alıyorum. Görüntü türünü manipüle edemediğim veya belirleyemediğim "application/octet-stream" üzerindedir. Bunun için herhangi bir çözüm var mı? –

İlgili konular