Actualmente estoy desarrollando un RESTO servicio web utilizando Web API. Me he encontrado con un problema en el proceso de datos binarios (una imagen) que se ha transmitido a través de una petición POST.

Desde la perspectiva del cliente, me las he arreglado para enviar datos binarios mediante el jQuery en Forma de Plugin. Pero porque yo soy muy nuevo .NETO (soy un desarrollador de PHP), estoy teniendo dificultades para procesar este binario de datos a través de la API de Web en el servidor.

Para confirmar que el jQuery en Forma de Plugin es el envío de los datos de la imagen correctamente, he escrito un trabajo PHP controlador que hace uso de la simple $_FILE variable global.

Ahora estoy tratando de lograr el mismo a través de la Web de la API. Aquí está un resumen de lo que he intentado. ¿Cómo puedo acceder a los datos binarios que ha sido enviado?

Modelo:

namespace EDHDelivery.Models
{
    public class Oferta
    {
        public int OfertaID { get; set; }
        public string Nombre { get; set; }
        public string Imagen { get; set; }
        public int ComercioID { get; set; }
    }
}

Controlador (parcial código que se muestra):

public Oferta Add(Oferta item)
{
    /*here my item will have the POST body with form values, 
    automatically serialized by the framework and I think an image binary*/
    var n = item.Nombre; //...etc.
}

OriginalEl autor goseta | 2013-02-06

2 Comentarios

  1. 9

    En resumen, usted tiene que enviar los datos a la multipart/form-data (que, estoy seguro, que ya lo están haciendo a través de los plugin que usted ha mencionado) y, a continuación, usted tiene que extraer los datos mediante uno de API Web MultipartContent proveedores.

    Hay un montón de recursos explicando cómo que:

    OriginalEl autor Filip W

  2. 1

    La misma cosa que he conseguido

    Este es mi carga Clase de usuario

    public class UploadUserFile
    {
        string _Token;
        string _UserId;
        string _IPAddress;
        string _DeviceInfo;
        string _FileName;
        string _ContentType;
        Stream _PhotoStream;
    
       public string Token
        {
            get
            {
                return _Token;
    
            }
    
            set
            {
                _Token = value;
            }
        }
        public string UserId
        {
            get
            {
                return _UserId;
            }
            set
            {
                _UserId = value;
            }
        }
        public string IPAddress
        {
            get
            {
                return _IPAddress;
            }
            set
            {
                _IPAddress = value;
            }
        }
        public string DeviceInfo
        {
            get
            {
                return _DeviceInfo;
            }
            set
            {
                _DeviceInfo = value;
            }
    
        }
        public string FileName
        {
            get
            {
                return _FileName;
            }
            set
            {
                _FileName = value;
            }
        }
        public string ContentType
        {
            get
            {
                return _ContentType;
    
            }
            set
            {
                _ContentType = value;
            }
    
        }
    
        public Stream PhotoStream
        {
            get
            {
                return _PhotoStream;
            }
            set
            {
                PhotoStream = value;
            }
        }
    
    }

    Este es mi API de la clase Controlador

     public class UploadUserPhotoController : ApiController
    {
    ///<summary>
    ///</summary>
    ///<param name="request">
    ///HttpRequestMessage, on the other hand, is new in .NET 4.5. 
    ///It is part of System.Net. 
    ///It can be used both by clients and services to create, send and receive requests and 
    ///responses over HTTP. 
    ///It replaces HttpWebRequest, which is obsolete in .NET 4.5 
    ///</param>
    ///<returns>return the response of the Page <returns>
    [HttpPost]
    public async Task<HttpResponseMessage> Post(HttpRequestMessage request)
    {
    var httpRequest = HttpContext.Current.Request;
    var UploadUserFileObj = new UploadUserFile
    {
    Token = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "Token").FirstOrDefault().Value.ToString(),
    UserId = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "UserId").FirstOrDefault().Value.ToString(),
    IPAddress = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "IPAddress").FirstOrDefault().Value.ToString(),
    ContentType = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "ContentType").FirstOrDefault().Value.ToString(),
    DeviceInfo = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "DeviceInfo").FirstOrDefault().Value.ToString(),
    FileName = request.GetQueryNameValuePairs().AsEnumerable().Where(x => x.Key == "FileName").FirstOrDefault().Value.ToString()
    };
    Stream requestStream = await request.Content.ReadAsStreamAsync();
    HttpResponseMessage result = null;
    if (requestStream!=null)
    {
    try
    {
    if(string.IsNullOrEmpty(UploadUserFileObj.FileName))
    {
    UploadUserFileObj.FileName = "DefaultName.jpg";
    }
    //Create a FileStream object to write a stream to a file
    using (FileStream fileStream = System.IO.File.Create(HttpContext.Current.Server.MapPath("~/locker/" + UploadUserFileObj.FileName), (int)requestStream.Length))
    {
    //Fill the bytes[] array with the stream data
    byte[] bytesInStream = new byte[requestStream.Length];
    requestStream.Read(bytesInStream, 0, (int)bytesInStream.Length);
    //Use FileStream object to write to the specified file
    fileStream.Write(bytesInStream, 0, bytesInStream.Length);
    result = Request.CreateResponse(HttpStatusCode.Created, UploadUserFileObj.FileName);
    }
    }
    catch (HttpException ex)
    {
    return result = Request.CreateResponse(HttpStatusCode.BadGateway,"Http Exception Come"+ ex.Message);
    }
    catch(Exception ex)
    {
    return result = Request.CreateResponse(HttpStatusCode.BadGateway, "Http Exception Come" + ex.Message);
    }
    }
    else
    {
    return result = Request.CreateResponse(HttpStatusCode.BadGateway, "Not eble to upload the File ");
    }
    return result;
    }
    }

    En este código que estoy usando el

    HttpRequestMessage para Transferir datos entre el clinete al servidor el servidor al cliente.

    OriginalEl autor mukesh UN singh

Dejar respuesta

Please enter your comment!
Please enter your name here