AWS Api Gateway as a HTTP Proxy is currupting binary uploaded image files
Asked Answered
C

1

6

I have a ruby on rails app that takes an image file, "attaches it to a member", and uploads it to s3. When I use insomnia and POST directly to the app ... it works, however when I use the exact same endpoint behind AWS Api Gateway, the image is corrupt and not viewable.


Here is the comparison of the requests.

  • LEFT = directly posted to the rails app
  • RIGHT = through api gateway

https://www.diffchecker.com/wwUmpB5W

Something I noticed, is that the paperclip gem is running different commands. It's evident that paperclip realized that the file is not an image when being passed through API gateway.


Here are some potentially relevant screenshots

method execution integration request api gateway settings


Here is the rails code:

def create
  logger.info 'upload_attachment_api_general_v1'
  logger.info params
  logger.info request.env
  @file = current_merchant.members.find(params[:member_id]).attachments.new(file: params[:file], label: params[:label])
  if params[:file] && @file.save
    render json: @file
  else
    render json: @file.errors, status: :unprocessable_entity
  end
end
Cuneiform answered 9/10, 2018 at 16:16 Comment(0)
C
15

I figured it out. The content type is NOT an image/png ... the content type is multipart/form-data

multipart

Cuneiform answered 9/10, 2018 at 16:33 Comment(2)
Thank you! I don't know how, but this does indeed do the trick for PNG images. It also explains why image/* wasn't working for me, but */* was working. It still doesn't work for .ICO images (such as favicon.ico), but nothing else has, so I'm going to chalk it up to API Gateway quirkiness.Teenateenage
One quick note, that you still need to deploy the api again AFTER you've made the settings adjustment. That may be obvious to others, but it wasn't to me.Pythagorean

© 2022 - 2024 — McMap. All rights reserved.