私は現在、c#WebAPIに取り組んでいます。特定の呼び出しでは、APIへのajax呼び出しを使用して2つの画像を送信する必要があります。これにより、APIはそれらをvarbinary(max)としてデータベースに保存できます。
Image
オブジェクトからHttpContent
またはbyte[]
をどのように抽出しますか?-
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;
}
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);
HttpContent
には、ByteArrayを返すAsyncメソッドがあります。つまり(ByteArrayのタスク)
Byte[] byteArray = await Content.ReadAsByteArrayAsync();
メソッドを同期的に実行できます
Byte[] byteArray = Content.ReadAsByteArrayAsync().Result;
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();
}
ByteArrayContentクラスによって公開されているCopyToAsync(Stream、TransportContext)メソッドを見てください。 [msdn link]