I am currently working on a c# web API. For a specific call I need to send 2 images using an ajax call to the API, so that the API can save them as varbinary(max) in the database.
- How do you extract an
Image
or byte[]
from a HttpContent
object?
- How do I do this twice? Once for each image.
-
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;
}
HttpContent
has a Async method which return ByteArray i.e (Task of ByteArray)
Byte[] byteArray = await Content.ReadAsByteArrayAsync();
You can run the method synchronously
Byte[] byteArray = Content.ReadAsByteArrayAsync().Result;
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);
You can use HttpContent.ReadAsByteArrayAsync
:
byte[] bytes = await response.Content.ReadAsByteArrayAsync();
Or, you can read the content with HttpContent.ReadAsStreamAsync
and extract to a byte[]
from there:
var stream = response.Content.ReadAsStreamAsync();
using (var memoryStream = new MemoryStream())
{
await stream.CopyToAsync(stream);
return memoryStream.ToArray();
}
Please look at CopyToAsync(Stream, TransportContext) method exposed by ByteArrayContent Class. [msdn link]