将 HttpContent 转换为 byte[]

Convert HttpContent into byte[]

我目前正在开发 c# web API。对于特定调用,我需要使用 ajax 调用向 API 发送 2 张图像,以便 API 可以将它们保存为数据库中的 varbinary(max)。

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

请查看 ByteArrayContent Class 公开的 CopyToAsync(Stream, TransportContext) 方法。 [msdn link]

HttpContent 有一个异步方法 return ByteArray 即(ByteArray 的任务)

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

您可以运行同步方法

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

您可以使用 HttpContent.ReadAsByteArrayAsync:

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

或者,您可以使用 HttpContent.ReadAsStreamAsync 阅读内容并从那里提取到 byte[]

var stream = await response.Content.ReadAsStreamAsync();
using (var memoryStream = new MemoryStream())
{
      await stream.CopyToAsync(memoryStream);
      return memoryStream.ToArray();
}
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);