web-dev-qa-db-ja.com

HttpContentをbyte []に​​変換します

私は現在、c#WebAPIに取り組んでいます。特定の呼び出しでは、APIへのajax呼び出しを使用して2つの画像を送信する必要があります。これにより、APIはそれらをvarbinary(max)としてデータベースに保存できます。

  1. ImageオブジェクトからHttpContentまたはbyte[]をどのように抽出しますか?
  2. これを2回行うにはどうすればよいですか?画像ごとに1回。

-

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;
}
8
James Madison
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);
2
James Madison

HttpContentには、ByteArrayを返すAsyncメソッドがあります。つまり(ByteArrayのタスク)

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

メソッドを同期的に実行できます

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

HttpContent.ReadAsByteArrayAsyncを使用できます:

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

または、HttpContent.ReadAsStreamAsyncを使用してコンテンツを読み取り、そこからbyte[]に抽出することもできます。

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

ByteArrayContentクラスによって公開されているCopyToAsync(Stream、TransportContext)メソッドを見てください。 [msdn link]

0
user1322437