class ActiveStorage::Service::S3Service

def upload_with_multipart(key, io, content_type: nil, content_disposition: nil, custom_metadata: {})

def upload_with_multipart(key, io, content_type: nil, content_disposition: nil, custom_metadata: {})
  part_size = [ io.size.fdiv(MAXIMUM_UPLOAD_PARTS_COUNT).ceil, MINIMUM_UPLOAD_PART_SIZE ].max
  object_for(key).upload_stream(content_type: content_type, content_disposition: content_disposition, part_size: part_size, metadata: custom_metadata, **upload_options) do |out|
    IO.copy_stream(io, out)
  end
end