将 HttpContent 转换为 byte[]
Convert HttpContent into byte[]
我目前正在开发 c# web API。对于特定调用,我需要使用 ajax 调用向 API 发送 2 张图像,以便 API 可以将它们保存为数据库中的 varbinary(max)。
- 如何从
HttpContent
对象中提取 Image
或 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;
}
请查看 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);
我目前正在开发 c# web API。对于特定调用,我需要使用 ajax 调用向 API 发送 2 张图像,以便 API 可以将它们保存为数据库中的 varbinary(max)。
- 如何从
HttpContent
对象中提取Image
或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;
}
请查看 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);