2013-02-26 4 views
3

Я создал услугу, которая принимает 2 вещи:Загрузите несколько файлов в один HTTPWebRequest

1) Параметр тела, называемый «тип».

2) Файл csv, который будет загружен.

я читаю эти две вещи в стороне сервера, как это:

//Read body params 
string type = HttpContext.Current.Request.Form["type"]; 

//read uploaded csv file 
Stream csvStream = HttpContext.Current.Request.Files[0].InputStream; 

, как я могу проверить это, я использую Скрипач, чтобы проверить это, но я могу отправить только одну вещь в то время (либо тип или файл), поскольку обе вещи имеют различный тип контента, как я могу использовать тип контента multipart/form-data и application/x-www-form-urlencoded в то же время.

Даже я использую этот код

public static void PostDataCSV() 
    { 
     //open the sample csv file 
     byte[] fileToSend = File.ReadAllBytes(@"C:\SampleData.csv"); 

     string url = "http://localhost/upload.xml"; 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Method = "POST"; 
     request.ContentType = "multipart/form-data"; 
     request.ContentLength = fileToSend.Length; 


     using (Stream requestStream = request.GetRequestStream()) 
     { 
      // Send the file as body request. 
      requestStream.Write(fileToSend, 0, fileToSend.Length); 
      requestStream.Close(); 
     } 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

     //read the response 
     string result; 
     using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
     { 
      result = reader.ReadToEnd(); 
     } 

     Console.WriteLine(result); 
    } 

Это также не отправляет любой файл на сервере.

+2

** многослойные **/формы-данные уже является заголовком для ** нескольких типов содержимого (файлы и данные формы). Вам не нужно приложение application/x-www-form-urlencoded с ним –

+0

, но оно не работает для меня, на стороне сервера я не получаю никакого файла, или вы можете сказать поток. – Popeye

ответ

2

Код, который у вас выше, не создает правильное многочастное тело.

Вы не можете просто записать файл в поток, каждая часть требует преамбул граничного маркера с заголовками на-части и т.д.

Upload files with HTTPWebrequest (multipart/form-data) Посмотреть

+0

Я проверю и дам вам знать, в любом случае спасибо человеку. – Popeye

0

Некоторые сведения о вашем нескольких ContentTypes проблемы здесь: http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.7.2

многочастному/форм-данных является единственным способом отправить типы кратные данных по протоколу HTTP.