Come gestire le immagini usando WebAPI

Domande

  1. Quali sono i diversi modi di POST / GET di immagini per il mio servizio? Penso di poter usare il testo Base-64 in JSON o rimanere nativo come binario. La mia comprensione è che convertendo l’immagine in testo, c’è un aumento significativo della dimensione del pacchetto.

  2. Se invio l’immagine (da un modulo Web, da un client nativo, da un altro servizio), dovrei aggiungere un Controller immagine / gestore o utilizzare un formattatore? Questa è anche una o / o domanda?

Ho fatto ricerche e ho trovato molti esempi in competizione, ma non sono sicuro di quale direzione dovrei dirigere.

C’è un sito / articolo del blog che espone i pro ei contro per questo?

Ho fatto delle ricerche e puoi vedere l’implementazione che ho trovato qui: http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

Per preservazione – ecco il profilo di ciò che il blog di Jamie ha detto:

Usa un controller:

Ottenere:

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; } 

Elimina:

 public void Delete(int id) { String filePath = HostingEnvironment.MapPath("~/Images/HT.jpg"); File.Delete(filePath); } 

Inviare:

 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( 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")); } }