'Save file to disk or copy its content to an open file(-like) object.
If *destination* is a directory, :attr:`filename` is added to the
path. Existing files are not overwritten by default (IOError).
:param destination: File path, directory or file(-like) object.
:param overwrite: If True, replace existing files. (default: False)
:param chunk_size: Bytes to read at a time. (default: 64kb)'

def save(self, destination, overwrite=False, chunk_size=(2 ** 16)):

    if isinstance(destination, basestring):
        if os.path.isdir(destination):
            destination = os.path.join(destination, self.filename)
        if ((not overwrite) and os.path.exists(destination)):
            raise IOError('File    exists.')
        with open(destination, 'wb') as fp:
            self._copy_file(fp, chunk_size)
    else:
        self._copy_file(destination, chunk_size)
