2015-06-30 7 views
6

मैं वर्तमान में सी # वेब एपीआई पर काम कर रहा हूं। एक विशिष्ट कॉल के लिए मुझे एपीएक्स को एजेक्स कॉल का उपयोग करके 2 छवियां भेजने की आवश्यकता है, ताकि एपीआई उन्हें डेटाबेस में varbinary (max) के रूप में सहेज सके।एचटीपीकंटेंट को बाइट में कनवर्ट करें []

  1. कैसे आप एक Image या byte[] एक HttpContent वस्तु से निकाल सकता हूँ?
  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

कृपया देखने के CopyToAsync (स्ट्रीम, TransportContext) ByteArrayContent क्लास द्वारा उजागर विधि पर। [msdn link]

+0

मैं थोड़ा और विस्तार है, शायद एक उदाहरण –

13

HttpContent एक Async विधि है जो लौट bytearray यानी (bytearray की टास्क)

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

आप विधि चला सकते हैं तुल्यकालिक

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

यह एक अच्छा लंबे बाइट [] रिटर्न के साथ जवाब के लिए देख रहा हूँ, लेकिन मैं दो अलग-अलग छवियों मुझे –

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 –

संबंधित मुद्दे