Для загрузки изображений, видео и т.д используется http запрос с методом post. При формировании запроса указываются заголовки, тело запроса и т.д, что обычно делается браузером при отправки формы. Тут Google в помощь.
Есть вариант №2, где общение с клиент-сервером идет на сыром tcp / udp и оболочками над ними. Ход действий:
0. Открыть соединение с сервером
1. Открыть и прочитать файл
2. Отправить пакеты с данными(action, data, hash и т.д по своему усмотрения)
3. Принять пакет и его прочитать. Обработать action, извлечь данные, проверить валидность.
4. Сохранить фото или любое другое действие.