Upload a video file by chunks

Here

 String contentRange = Integer.toString(byteNumber + 1);

you start from 1 and not from 0 at the first iteration.

Here

 request.addHeader("Content-Length", contentLength);

you put the entire file content length and not the length of the current chunk.


I think your problem could simply be the result of this line:

request.addHeader("Content-Range", "bytes%20" + contentRange);

Try and replace "bytes%20" by simply "bytes "

In your output you see the corresponding header has incorrect content:

Headers: {
    Content-Length=15125120,
    Content-Type=video/mp4,
    Content-Range=bytes%200-10485759/15125120     <-- INCORRECT
}

On the topic of Content-Range...

You're right that an example final block of content should have a range like 14680064-15125119/15125120. That's part of the HTTP 1.1 spec.