2015-06-30 151 views
6

我目前正在研究c#web API。對於特定的調用,我需要使用ajax調用API來發送2個圖像,以便API可以將它們保存爲數據庫中的varbinary(max)。將HttpContent轉換爲字節[]

  1. 你如何提取從HttpContent對象的Imagebyte[]
  2. 我該如何做兩次?每個圖像一次。

-

var authToken = $("#AuthToken").val(); 
var formData = new FormData($('form')[0]); 
debugger; 
$.ajax({ 
    url: "/api/obj/Create/", 
    headers: { "Authorization-Token": authToken }, 
    type: 'POST', 
    xhr: function() { 
     var myXhr = $.ajaxSettings.xhr(); 
     return myXhr; 
    }, 
    data: formData, 
    cache: false, 
    contentType: false, 
    processData: false 
}); 

-

public async Task<int> Create(HttpContent content) 
{ 
    if (!content.IsMimeMultipartContent()) 
    { 
     throw new UnsupportedMediaTypeException("MIME Multipart Content is not supported"); 
    } 

    return 3; 
} 

回答

1
if (!content.IsMimeMultipartContent()) 
{ 
    throw new UnsupportedMediaTypeException("MIME Multipart Content is not supported"); 
} 

var uploadPath = **whatever**; 
if (!Directory.Exists(uploadPath)) 
{ 
    Directory.CreateDirectory(uploadPath); 
} 

var provider = new MultipartFormDataStreamProvider(uploadPath); 
await content.ReadAsMultipartAsync(provider); 

return File.ReadAllBytes(provider.FileData[0].LocalFileName); 
0

請看通過ByteArrayContent類暴露CopyToAsync(流,TransportContext)方法。 [msdn link]

+0

我在尋找一個更詳細一點,也許一個例子 –

13

HttpContent有一個異步方法,該方法返回的ByteArray即(字節陣列的任務)

Byte[] byteArray = await Content.ReadAsByteArrayAsync(); 

可以運行的方法同步

Byte[] byteArray = Content.ReadAsByteArrayAsync().Result; 
+0

這將返回一個不錯的長期的byte []的答案,但我有兩個單獨的圖像我需要提取 –

0

您可以使用HttpContent.ReadAsByteArrayAsync

byte[] bytes = await response.Content.ReadAsByteArrayAsync(); 

或者,您可以閱讀01的內容並提取到byte[]從那裏:

var stream = response.Content.ReadAsStreamAsync(); 
using (var memoryStream = new MemoryStream()) 
{ 
     await stream.CopyToAsync(stream); 
     return memoryStream.ToArray(); 
} 
+0

「無法解析符號.CopyToAsync」 –

+0

@James你在什麼.NET版本上? –

+0

我正在使用.NET 4.5 –