how to upload to aws s3 with transformation ?

 def image_upload
    file_name = params[:croppedImage].original_filename
    file_type = params[:croppedImage].content_type
    s3 = AWS::S3.new(access_key_id: ENV['AWS_ACCESS_KEY_ID'],
                    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'], region: 'us-east-1')
    bucket = s3.buckets[ENV['S3_BUCKET']]
    name = "dinetab_#{Time.current.to_i}" + "_image.#{file_type.split('/').last}"
    convert_image(name, params[:croppedImage])
    name = name.split('.').first
    name = "#{name}.jpg"
    @file = File.read("public/#{name}")
    obj = bucket.objects.create(name, @file,
                               { content_type: file_type,
                                 acl: "public_read" })
    url = obj.public_url().to_s
    width, height = FastImage.size(url)
    File.delete("public/#{name}")
    render json: { status: "success", url: url, width: width, height: height }
  end

  def convert_image(name, image)
    tmp = image.tempfile
    destiny_file = File.join('public', name)
    FileUtils.move tmp.path, destiny_file
    @image = MiniMagick::Image.new(destiny_file)
    @image.path
    @image.resize "800x800"
    @image.format "jpg"
    name = name.split('.').first
    @image.write "public/#{name}.jpg"
  end

Leave a comment