2014-12-10 2 views
0

Я пытаюсь написать инструмент для пакетной загрузки изображений на свой сайт, но мне не удается получить (или отправить) фактические данные на сервер.C# - WebClient.UploadFile не получает данные POST

Начну с некоторыми C# код, как это должно объяснить, что я пытаюсь сделать лучше, что я могу сформулировать:

private bool Upload(string LocalFile, int ItemID, string Description, DateTime Date, string Photographer) 
    { 
     WebClient oWeb = new System.Net.WebClient(); 
     NameValueCollection parameters = new NameValueCollection(); 
     parameters.Add("Type", "1"); 
     parameters.Add("ID", ItemID.ToString()); 
     parameters.Add("Desc", Description); 
     parameters.Add("Date", Date.ToString("yyyy-MM-dd")); 
     parameters.Add("Photographer", Photographer); 

     oWeb.QueryString = parameters; 
     var responseBytes = oWeb.UploadFile("http://www.teamdefiant.co.uk/moveuploadedfile.php", LocalFile); 
     string response = Encoding.ASCII.GetString(responseBytes); 

     MessageBox.Show("Response: \n\n" + response + "\n\nPost Data: \n\n" + LocalFile + "\n" + ItemID.ToString() + "\n" + Description + "\n" + Date.ToString("yyyy-MM-dd") + "\n" + Photographer); 
     Clipboard.SetText("Response: \n\n" + response + "\n\nPost Data: \n\n" + LocalFile + "\n" + ItemID.ToString() + "\n" + Description + "\n" + Date.ToString("yyyy-MM-dd") + "\n" + Photographer); 

     return true; 
    } 

Когда я получаю ответ, (как это отображается в MessageBox, и Clipboard.SetText) Я получаю следующие данные:

Response: 

Upload: 
Type: 
Size: 0kb 
Stored in: 







Post Data: 

C:\Users\<MyFolder>\Pictures\Website\ExampleImage.png 
4 
Picture Description 
2014-12-10 
Photographer 

И для полноты картины, вот код PHP:

<?PHP 
    if ($_FILES["myfile"]["error"] > 0) 
    { 
     echo "Error: " . $_FILES["myfile"]["error"] . "\n"; 
    } 
    else 
    { 
     echo "Upload: " . $_FILES["myfile"]["name"] . "\n"; 
     echo "Type: " . $_FILES["myfile"]["type"] . "\n"; 
     echo "Size: " . ($_FILES["myfile"]["size"]/1024) . " Kb\n"; 
     echo "Stored in: " . $_FILES["myfile"]["tmp_name"] . " \n"; 
     echo $_POST["Type"] . " \n"; 
     echo $_POST["ID"] . " \n"; 
     echo $_POST["Desc"] . " \n"; 
     echo $_POST["Date"] . " \n"; 
     echo $_POST["Photographer"] . " \n"; 
    } 
?> 

Я пробовал искать ответы, но не смог найти рабочее решение, которое я могу понять. (Я все еще просто изучаю C#.)

Я не получаю никаких ошибок кода в Visual Studio, не получаю никаких ошибок на сервере POST, поэтому я в тупике.

Любая помощь приветствуется!

EDIT

Я пытался посетить веб-страницу непосредственно и получить тот же ответ, так что похоже, нет данных посылается на сервер ?? :(

+0

где ваш код формы, иногда не прикладывая многокомпонентные и другие вещи на

тег может вызвать проблемы , – unixmiah

+0

Какая форма тега? Я не загружаю данные из веб-формы. Я пытаюсь загрузить данные программно из моего приложения C#. –

+0

на php-код add print_r ($ _ POST); – unixmiah

ответ

0

ваш C# передний конец кода не имеет несколько вещей

вам нужно определить ОКТЕТА Тип потока контента

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

вам также необходимо указать POST в вашем UploadFile

oWeb.UploadFile ("http://www.teamdefiant.co.uk/moveuploadedfile.php","POST", LocalFile); 

попробуйте этот простой код, который я нашел в Интернете, создаю другую ветку работы и попробуем, это намного более основательно и в рабочем состоянии:

скрипт PHP:

<?php 
$uploaddir = 'upload/'; // Relative Upload Location of data file 

if (is_uploaded_file($_FILES['file']['tmp_name'])) { 
$uploadfile = $uploaddir . basename($_FILES['file']['name']); 
echo "File ". $_FILES['file']['name'] ." uploaded successfully. "; 


if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) { 
echo "File is valid, and was successfully moved. "; 
} 

else 
print_r($_FILES); 
} 

else { 
echo "Upload Failed!!!"; 
print_r($_FILES); 
} 
?> 

и это C# код:

System.Net.WebClient Client = new System.Net.WebClient(); 
Client.Headers.Add("Content-Type","binary/octet-stream"); 
byte[] result = Client.UploadFile ("http://your_server/upload.php","POST","C:\test.jpg"); 
string s = System.Text.Encoding .UTF8 .GetString (result,0,result.Length); 
+0

Спасибо за ваш ответ. Если у меня есть следующие строки, я все равно получаю пустые данные $ _POST. oWeb.QueryString = параметры; oWeb.Headers.Добавить («Content-Type», «binary/octet-stream»); var responseBytes = oWeb.UploadFile ("http://www.teamdefiant.co.uk/moveuploadedfile.php", "POST", LocalFile); Если у меня есть линии таким образом, я получаю ошибку исключения; oWeb.Headers.Add («Content-Type», «binary/octet-stream»); oWeb.QueryString = параметры; var responseBytes = oWeb.UploadFile ("http://www.teamdefiant.co.uk/moveuploadedfile.php", "POST", LocalFile); –

+0

Извините за плохое форматирование комментария ... –

+0

Вы пытались помещать LocalFile в кавычки? – unixmiah

Смежные вопросы