Honestly, we really don't need all this.  Keep it simple with a reasonable initial chunksize (which is only used if we don't know the size of the file anyway) of say 64k, and a max chunksize to avoid memory running away of say 2MB or so.