2012-04-19 1 views
9

В настоящее время у меня есть приложение с острым приложением (клиентское приложение). и веб-приложение, написанное php. Я хочу передать некоторые файлы всякий раз, когда конкретное действие выполняется на стороне клиента. Вот код клиента, чтобы загрузить файл на сервер PHP ..Загрузить на сервер PHP с помощью приложения с острым клиентом

private void button1_Click(object sender, EventArgs e) 
{ 
    System.Net.WebClient Client = new System.Net.WebClient(); 

    Client.Headers.Add("Content-Type", "binary/octet-stream"); 

    byte[] result = Client.UploadFile("http://localhost/project1/upload.php", "POST", 
             @"C:\test\a.jpg"); 

    string s = System.Text.Encoding.UTF8.GetString(result, 0, result.Length); 
} 

Вот файл upload.php переместить файл ..

$uploads_dir = './files/'; //Directory to save the file that comes from client application. 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
    $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
    $name = $_FILES["pictures"]["name"][$key]; 
    move_uploaded_file($tmp_name, "$uploads_dir/$name"); 
} 

Я не получаю никаких ошибок сверху код. но он, похоже, не работает. Почему это? Я что-то упускаю?

+0

Каковы ошибки, которые вы получаете? – Baba

+0

@Baba У меня нет ошибок. Но мой файл не передается. –

+0

Должен ли тип содержимого быть 'multipart/form-data'? – bfavaretto

ответ

8

вашего текущий код PHP для обработки множественных загрузки файлов, но ваши C# код только загрузки один файла.

Вы должны изменить свой PHP код несколько, удаляя петлю foreach:

<?php 
$uploads_dir = './files'; //Directory to save the file that comes from client application. 
if ($_FILES["file"]["error"] == UPLOAD_ERR_OK) { 
    $tmp_name = $_FILES["file"]["tmp_name"]; 
    $name = $_FILES["file"]["name"]; 
    move_uploaded_file($tmp_name, "$uploads_dir/$name"); 
} 
?> 

Вы также должны убедиться, что каталог ./files существует.

Я проверил вышеуказанный PHP-код с кодом C#, и он отлично работал.

+3

он отлично работает :) Большое спасибо за ур время и вклад. надеюсь, что это может помочь другим. –

+0

___ V.OILA ___ – Sayka

0

Ваш php-код кажется правильным, однако вы пытаетесь получить доступ к файлу, используя ключ «picture» в глобальном файле $ _FILES. Это не похоже на ваш код csharp. Я не знаю, как это сделать. Вы можете попробовать, чтобы увидеть, как он был назван в вашем PHP, делая print_r или vardump вас $ _FILE глобальной или с помощью array_keys функционировать

Regards

Edit: я нашел эту ссылку, которая могла бы помочь вам добавить «имя» в загруженном файл: http://www.bratched.com/en/home/dotnet/69-uploading-multiple-files-with-c.html

+0

Я только что назначил его как изображение. на самом деле что означает $ _FILES ["pictures"] ["error"] код? –

+0

@FawzanIzy http://php.net/manual/en/features.file-upload.errors.php – drew010

+0

Этот ответ неверен. Код PHP в этом вопросе предназначен для обработки нескольких загрузок файлов и работает только при использовании ''. – Xenon