可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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; }
回答1:
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;
回答2:
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);
回答3:
Please look at CopyToAsync(Stream, TransportContext) method exposed by ByteArrayContent Class. [msdn link]
回答4:
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(); }