Calculate the Size of Base64.strict_encode64 in Ruby

I was in need to calculate the size of the output of Base64.strict_encode64.
I wanted to get this value to determine if the file was too big to send to an API endpoint.
If the file was too big I didn’t want to spend time processing and trying to send the data.
So I put together this method using a bunch of answers from stack overflow and the article in wikipedia for base64

My method looks like this:

    def calculate_strict_base64_size(path)
        
        # get the size of the file 
        size = File.size(path)
        
        # calculate the code size, 
        # see this post 
        # http://stackoverflow.com/questions/13378815/base64-length-calculation
        code_size = (size * 4) / 3

        # add any needed padding 0, 1, 2
        # see this post for the padding calculation
        # http://stackoverflow.com/questions/1533113/calculate-the-size-to-a-base-64-encoded-message
        # strict_encode64 complies with RFC 4648 and no line feeds are added
        # so we only need the padding
        padding = (size % 3)? (3 - (size % 3)) : 0

        # combine for the totals plus terminating null character
        total_size   = code_size + padding + 1

        return total_size
    end

and for short:

    def calculate_strict_base64_size(path)
        size = File.size(path)
        code_size = (size * 4) / 3
        padding = (size % 3)? (3 - (size % 3)) : 0
        total_size   = code_size + padding + 1
        return total_size
    end
  1. A coworker stored production assets in Dropbox. Chaos ensued.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.