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