Содержимое HTTP-потока пост-загрузки и его механизм не соответствуют ожиданиям. Вы не можете просто записать файл в качестве содержимого публикации, потому что POST имеет очень специфические стандарты RFC о том, как данные, включенные в запрос POST, должны отправляться. Это не только форматирование самого контента, но и механизм его «записи» в выходной поток. Много времени POST теперь написано кусками. Если вы посмотрите на исходный код HTTPClient Apache, вы увидите, как он записывает куски.
Существуют причуды с длиной содержимого в результате, потому что длина содержимого увеличивается на небольшое число, идентифицирующее фрагмент, и случайную небольшую последовательность символов, которая разделяет каждый фрагмент по мере его записи в потоке. Посмотрите на некоторые другие методы, описанные в более новых версиях Java HTTPURLConnection.
http://java.sun.com/javase/6/docs/api/java/net/HttpURLConnection.html#setChunkedStreamingMode(int)
Если вы не знаете, что делаете, и не хотите изучать это, то работа с добавлением зависимости, такой как Apache HTTPClient, действительно оказывается намного проще, потому что она абстрагирует всю сложность и просто работает.