2016-08-01 130 views
0

我有一個函數通過它調用我的REST API。我需要在請求中傳遞圖像。我如何實現這一目標?REST API將圖像發送到請求

爲前:

public int Save(Image image) 
{ 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 
    req.Method = "POST"; 
    HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
} 

這裏,我怎麼把我的 '形象' 了我的請求 'REQ'?

+0

http://stackoverflow.com/questions/10320232/how-to-accept-a-file-post-asp-net-mvc-4-webapi –

回答

1

嘗試使用類似:

req.ContentType = "multipart/form-data"; 

using (var ms = new MemoryStream()) 
{ 
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); //if it is jpeg 
    string encoded = Convert.ToBase64String(ms.ToArray()); 
    byte[] reqData = Encoding.UTF8.GetBytes(encoded); 
    using (var stream = req.GetRequestStream()) 
    { 
     stream.Write(reqData, 0, reqData.Length); 
    } 
} 
+0

@Bucky的可能重複你過敏的接受答案? – Marusyk

0

你可以做這樣的事情在客戶端:

HttpClient client = new HttpClient(); 
var imageStream = File.OpenRead(@"C:\p1.jpg"); 
var content = new StreamContent(imageStream); 
content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
var response = await client.PostAsync("URL", content); 

您可以從NugetPackage Microsoft.Net.Http

得到 HttpClient的

在REST API端(接收端),您可以從Request.Content對象中獲取它,如下所示:

public void Post() 
{ 
      using (var fileStream = File.Create("C:\\NewFile.jpg")) 
      { 
       using (MemoryStream tempStream = new MemoryStream()) 
       { 
        var task = this.Request.Content.CopyToAsync(tempStream); 
        task.Wait(); 

        tempStream.Seek(0, SeekOrigin.Begin); 
        tempStream.CopyTo(fileStream); 
        tempStream.Close(); 
       } 

      } 
}