2015-06-30 31 views
6

Şu anda bir C# web API üzerinde çalışıyorum. Belirli bir çağrı için API'ya ajax çağrısı kullanarak 2 resim göndermem gerekiyor, böylece API bunları veritabanında varbiner (max) olarak kaydedebiliyor.HttpContent'i bayt haline dönüştürme []

  1. Nasıl bir HttpContent nesneden bir Image veya byte[] ayıklamak?
  2. Bunu iki kez nasıl yaparım? Her görüntü için bir kez.

-

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; 
} 

cevap

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

bakınız ByteArrayContent Sınıfı tarafından maruz copyToAsync (Akış, TransportContext) yöntemine. [msdn link]

+0

Biraz daha detaylı, belki bir örnek Bu güzel uzun byte [] döndüren –

13

HttpContent eşzamanlı

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

ile bir cevap arıyorum ama iki ayrı görüntüler var –

0

kullanabilirsiniz ByteArray yani (ByteArray Görev)

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

yöntemden çalıştırabilirsiniz dönmek bir zaman uyumsuz yöntemini sahiptir HttpContent.ReadAsByteArrayAsync:

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

Veya içeriği 01 ile okuyabilirsiniz. Bir byte[] içinve özü oradan:

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

ayıklamak gerekiyor "Çözüm çözülemiyor .CopyToAsync" –

+0

@James Hangi .NET sürümünü kullanıyorsunuz? –

+0

.NET 4.5 –