Preguntas

  1. ¿Cuáles son las diferentes maneras de POST/GET imágenes a mi servicio? Creo que se puede usar de Base 64 de texto en JSON o estancia nativos como binario. Mi entendimiento es que mediante la conversión de la imagen en el texto, hay un aumento significativo es que el tamaño del paquete.

  2. Si puedo enviar la imagen (desde un formulario web, desde un cliente nativo, de otro servicio), debo agregar una Imagen Controlador/Controlador o el uso de un Formateador? Esto es incluso una pregunta?

He investigado y he encontrado gran cantidad de ejemplos, pero no estoy seguro de que la dirección que debe ser la partida.

Hay un sitio/blog el artículo que expone los pros y los contras de esto?

  • Creo que todos los métodos que he esbozado son válidos, pero como tu pregunta gradas, es demasiado abiertas. El enfoque que se desea dependerá, al menos, en qué tipo de clientes te apoyo (formulario de Puestos y AJAX clientes límite de formatos, soporte para la compresión, etc.) así como lo que quieren hacer con las imágenes en el servidor. Creo que usted sólo necesitará un MediaTypeFormatter si usted realmente desea cargar y manipular en su página Web métodos de la API, por ejemplo, e incluso entonces, usted no necesita uno. Si todo lo que quiero hacer es guardar a archivo, definitivamente, usted no necesita uno.
  • TL;DR, creo que usted debería reducir sus requisitos para hacer la pregunta más responsable. Como es, se va a languidecer sin respuesta o llegar a poner en espera como demasiado amplio o subjetiva.
InformationsquelleAutor Jamie Dixon | 2013-09-25

2 Comentarios

  1. 25

    Hice algunas investigaciones y se puede ver la aplicación que se me ocurrió aquí: http://jamessdixon.wordpress.com/2013/10/01/handling-images-in-webapi/

    • Jamie, ¿puedes arreglar el enlace?
    • Gran enlace, espero a ver la implementación de almacenamiento de azure.
    • El código tiene un error, este código no iba a permitir dos imágenes para ser leídos en el mismo tiempo. Debe ser algo como esto: FileStream s2 = new FileStream(nombre, FileMode.Open, FileAccess.Leer, FileShare.Leer);
    • Esta respuesta es inútil una vez que el enlace está caído.
    • En primer lugar, usted es un salvavidas. Tengo esto para trabajar con ningún problema en absoluto. Solo una cosa, no olvide cerrar su FileStream. La segunda vez que el archivo se solicita, no va a venir a través como está siendo utilizado por un «proceso». Aparte de eso, gran post.
  2. 23

    Para la conservación del bien – aquí está el resumen de lo que Jamie blog dijo:

    El uso de un Controlador:

    Obtener:

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

    Eliminar:

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

    Post:

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

Dejar respuesta

Please enter your comment!
Please enter your name here