Я пытаюсь синхронизировать двоичные файлы (фотографии) из моего приложения Monotouch , работающего на iPad , на наш PHP сервер (Windows) с помощью Webclient .  Файлы отправляются и принимаются, но двоичные файлы кажутся поврежденными на сервере и не могут быть просмотрены. 
Вот код на стороне клиента:
 static void UploadPhotos() { WebClient client = new WebClient (); client.Headers.Add("Content-Type","application/octet-stream"); string sUri = GetUri(); client.UploadFile (sUri, "POST", "images/test.png"); } 
  И вот код PHP на сервере: 
 <?php $uploadDir = "C:\\uploaddir\\"; foreach ($_FILES as $file_name => $file_array) { $uploadFile = $uploadDir . $file_array['name']; move_uploaded_file($file_array['tmp_name'], $uploadFile); } ?> 
Кто-нибудь знает, почему двоичные данные повреждены при загрузке и как их исправить?
Обновить:
  Очень странно.  Кажется, проблема в том, что у меня есть только эффекты png ;  Изображения jpeg похоже, встречаются правильно.  Изображения jpeg правильно отображают размеры изображения в проводнике Windows на сервере, и я могу просмотреть изображения jpeg .  jpeg которые я тестировал, были около 90 КБ.  Файлы png однако, не соответствуют действительности.  В проводнике Windows файлы png не отображают размеры изображений и не могут быть просмотрены.  Размер файла png больше на сервере.  Так, например, я использую следующее изображение png : 
http://img.ruphp.com/c%23/tux.png
Исходный файл – 40,2 КБ (41236 байт); после передачи размер файла на сервере составляет 45,3 КБ (46468 байт). У кого-нибудь есть идеи, как это может произойти?
Попробуйте настроить Content-Type на «application / octet-stream», я думаю, что это более распространено для двоичных данных, и сервер может не распознавать бинарный / октетный поток.
Мне пришлось использовать UploadDataAsync
  using (WebClient client = new WebClient()) { client.Credentials = CredentialCache.DefaultCredentials; byte[] bytes = File.ReadAllBytes(filePath); client.UploadDataAsync(new Uri(url), bytes); }