Я пытаюсь синхронизировать двоичные файлы (фотографии) из моего приложения 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); }