Ответ 1
Я провел некоторое исследование, и вы можете увидеть реализацию, которую я придумал здесь: http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/
Я разворачиваю свое первое приложение WebApi, и у меня есть 2 вопроса о том, как обращаться с изображениями.
1) Каковы различные способы загрузки POST/GET на мой сервис? Я думаю, что я могу использовать текст Base-64 в JSON или оставаться родным как двоичный. Я понимаю, что, преобразуя изображение в текст, значительно увеличивается размер пакета.
2) Если я отправлю изображение (из веб-формы, из собственного клиента, из другой службы), должен ли я добавить Image Controller/Handler или использовать Formatter? Это даже вопрос или вопрос?
Я исследовал StackOverflow и Google и придумал много примеров:
Изображение к службе (POST) Контроллер:
http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2 http://code.msdn.microsoft.com/Uploading-large-files-386ec0af#contentFormatter: http://jflood.net/tag/mediatypeformatter/
Изображение из службы (GET) контроллер: http://www.dotnetcurry.com/ShowArticle.aspx?ID=856 ASP.NET Web API загружает изображения в виде двоичных файлов http://www.strathweb.com/2013/01/asynchronously-streaming-video-with-asp-net-web-api/Formatter:
http://www.asp.net/web-api/overview/formats-and-model-binding/media-formattersИзображение И ОТ контроллер: http://www.codeguru.com/csharp/.net/returning-images-from-asp.net-web-api.htm
Formatter: http://byterot.blogspot.com/2012/04/aspnet-web-api-series-part-5.html
Я не уверен, в каком направлении я должен идти. Является ли статья сайта/блога, в которой изложены плюсы и минусы? И я даже не смотрел WebApi V2, чтобы узнать, есть ли у этого другой способ подумать об этом.
Заранее спасибо
Я провел некоторое исследование, и вы можете увидеть реализацию, которую я придумал здесь: http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/
Для сохранения цели - вот схема того, что сказал блог Джейми:
Используйте контроллер:
Get:
public HttpResponseMessage Get(int id)
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
String filePath = HostingEnvironment.MapPath("~/Images/HT.jpg");
FileStream fileStream = new FileStream(filePath, FileMode.Open);
Image image = Image.FromStream(fileStream);
MemoryStream memoryStream = new MemoryStream();
image.Save(memoryStream, ImageFormat.Jpeg);
result.Content = new ByteArrayContent(memoryStream.ToArray());
result.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg");
return result;
}
Удалить
public void Delete(int id)
{
String filePath = HostingEnvironment.MapPath("~/Images/HT.jpg");
File.Delete(filePath);
}
Сообщение:
public HttpResponseMessage Post()
{
var result = new HttpResponseMessage(HttpStatusCode.OK);
if (Request.Content.IsMimeMultipartContent())
{
//For larger files, this might need to be added:
//Request.Content.LoadIntoBufferAsync().Wait();
Request.Content.ReadAsMultipartAsync<MultipartMemoryStreamProvider>(
new MultipartMemoryStreamProvider()).ContinueWith((task) =>
{
MultipartMemoryStreamProvider provider = task.Result;
foreach (HttpContent content in provider.Contents)
{
Stream stream = content.ReadAsStreamAsync().Result;
Image image = Image.FromStream(stream);
var testName = content.Headers.ContentDisposition.Name;
String filePath = HostingEnvironment.MapPath("~/Images/");
//Note that the ID is pushed to the request header,
//not the content header:
String[] headerValues = (String[])Request.Headers.GetValues("UniqueId");
String fileName = headerValues[0] + ".jpg";
String fullPath = Path.Combine(filePath, fileName);
image.Save(fullPath);
}
});
return result;
}
else
{
throw new HttpResponseException(Request.CreateResponse(
HttpStatusCode.NotAcceptable,
"This request is not properly formatted"));
}
}