2013-06-10 1 views
1

(я французский, извините за мой английский)
Я не нахожу/не понимаю, как отправить простой PDF-файл по почте в webService (протокол REST).
Я попробовал несколько примеров, но это не слово. И когда я использую a, это работа, но я хочу сделать это только в коде!
Мой вопрос: звание: Как отправить этот файл в формате PDF?
URL-адрес: https://test.website.fr/Website/api/transactions/ "+ SVAL +"/Contrat
PDF файл: questions.pdfКак отправить PDF по POST HttpWebRequest в C#

Спасибо. Iris Тушар

ответ

2

Я нашел решение:

//Identificate separator 
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); 
//Encoding 
byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); 

//Creation and specification of the request 
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create("https://test.website.fr/Website/api/transactions/" + sVal + "/contrat"); //sVal is id for the webService 
wr.ContentType = "multipart/form-data; boundary=" + boundary; 
wr.Method = "POST"; 
wr.KeepAlive = true; 
wr.Credentials = System.Net.CredentialCache.DefaultCredentials; 

string sAuthorization = "login:password";//AUTHENTIFICATION BEGIN 
byte[] toEncodeAsBytes = System.Text.ASCIIEncoding.ASCII.GetBytes(sAuthorization); 
string returnValue = System.Convert.ToBase64String(toEncodeAsBytes); 
wr.Headers.Add("Authorization: Basic " + returnValue); //AUTHENTIFICATION END 
Stream rs = wr.GetRequestStream(); 


string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; //For the POST's format 

//Writting of the file 
rs.Write(boundarybytes, 0, boundarybytes.Length); 
byte[] formitembytes = System.Text.Encoding.UTF8.GetBytes(Server.MapPath("questions.pdf")); 
rs.Write(formitembytes, 0, formitembytes.Length); 

rs.Write(boundarybytes, 0, boundarybytes.Length); 

string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; 
string header = string.Format(headerTemplate, "file", "questions.pdf", contentType); 
byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes(header); 
rs.Write(headerbytes, 0, headerbytes.Length); 

FileStream fileStream = new FileStream(Server.MapPath("questions.pdf"), FileMode.Open, FileAccess.Read); 
byte[] buffer = new byte[4096]; 
int bytesRead = 0; 
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) 
{ 
    rs.Write(buffer, 0, bytesRead); 
} 
fileStream.Close(); 

byte[] trailer = System.Text.Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); 
rs.Write(trailer, 0, trailer.Length); 
rs.Close(); 
rs = null; 

WebResponse wresp = null; 
try 
{ 
    //Get the response 
    wresp = wr.GetResponse(); 
    Stream stream2 = wresp.GetResponseStream(); 
    StreamReader reader2 = new StreamReader(stream2); 
    string responseData = reader2.ReadToEnd(); 
} 
catch (Exception ex) 
{ 
    string s = ex.Message; 
} 
finally 
{ 
    if (wresp != null) 
    { 
     wresp.Close(); 
     wresp = null; 
    } 
    wr = null; 
} 
+0

Хорошо спасибо, это идеально подходит для моей проблемы. – user2471450

0

Это должно быть то, что вы ищете:

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

Вот краткий пример кода:

 byte[] pdfFile = File.ReadAllBytes("pdf file path here"); 

     WebRequest request = WebRequest.Create("https://test.site.fr/Testfile"); 
     request.Method = "POST"; 
     request.ContentLength = pdfFile.Length; 
     request.ContentType = "application/pdf"; 

     Stream stream = request.GetRequestStream(); 
     stream.Write(pdfFile, 0, pdfFile.Length); 
     stream.Close(); 

     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     StreamReader reader = new StreamReader(response.GetResponseStream()); 
     Console.WriteLine(reader.ReadToEnd()); 
     reader.Close(); 
+0

Хорошо, спасибо
Но webService нуждается в дополнительной информации: идентификатор перехвата (id = 123456789). Для информации: если я использую

, он работает, но если я делаю это в C# (код позади), он не работает.
Итак, как я могу добавить параметр (id = 123465789) в этот код? – user2471450

+0

Это не то, о чем вы изначально просили. Похоже, вы спрашиваете, что вам нужно отправить документ в формате pdf с некоторой вспомогательной информацией. Какой тип данных запрашивает сервер? Нужен ли XML? Вы должны переформулировать свой вопрос, чтобы включить свою полную проблему. – Alex

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