Всё, более-менее основы вспомнил.
Итак, тонкости для передачи файла на сервер.
Заголовки, обязательные для заполнения:
Content-type. Это почти всегда
application/x-www-form-urlencoded (может быть и другой)
Content-length. Это размер всех данных, отправляемых на сервер.
Заголовки устанавливаются методом setRequestProperty.
Итого план действий:
Открыть коннекцию.
Отсигнализировать, что будем отправлять данные:
setDoOutput (true)
Считать файл в строку. Закодировать при помощи URLEncoder.encode().
Записать в какой-нибудь OutputStream параметры "формы" в виде
name1 = value1&file=filestring.
Параметры лучше называть только при помощи alphanumeric, значения - обяательно кодировать.
Установить заголовки коннекции, причём в Content-length пойдёт длина стрима, получаемая его методом size().
Переписать наш стрим в стрим коннекции при помощи writeTo.
OurStream.writeTo(connection.getOutputStream());
По желанию почитать ответ сервера из connection.getInputStream() Как минимум для отладки весьма полезно

.
Вот вроде бы и всё.
З.Ы: есс-но параметры "формы" нужно согласовать с ожидаемыми на сервере.