2013-02-06 60 views
7

मैं वर्तमान में REST वेब सेवा वेब एपीआई का उपयोग कर वेब सेवा विकसित कर रहा हूं। मुझे बाइनरी डेटा (एक छवि) प्रसंस्करण में समस्या का सामना करना पड़ा है जो POST अनुरोध के माध्यम से प्रेषित किया गया है।पोस्ट या पुट रीस्ट अनुरोध से वेब एपीआई में बाइनरी डेटा प्रोसेसिंग

क्लाइंट के परिप्रेक्ष्य से, मैंने jQuery फॉर्म प्लगइन का उपयोग करके बाइनरी डेटा भेजने में कामयाब रहा है। लेकिन क्योंकि मैं .NET (मैं एक PHP डेवलपर हूं) के लिए बहुत नया हूं, मुझे सर्वर पर वेब एपीआई के माध्यम से इस बाइनरी डेटा को संसाधित करने में कठिनाई हो रही है।

पुष्टि करने के लिए jQuery फार्म प्लगइन छवि डेटा सही ढंग से भेज रहा है, मैं एक काम कर पीएचपी हैंडलर कि सरल $_FILE वैश्विक चर का उपयोग करता है लिखा है।

अब मैं वेब एपीआई के माध्यम से इसे पूरा करने की कोशिश कर रहा हूं। मैंने जो कोशिश की है उसकी एक रूपरेखा यहां दी गई है। मैं भेजा गया बाइनरी डेटा कैसे प्राप्त करूं?

मॉडल:

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

नियंत्रक (आंशिक कोड दिखाया गया है):

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. 
} 
+0

देखें http://stackoverflow.com/a/967101/955881 – drch

उत्तर

8

संक्षेप में, आप multipart/form-data (जो, मैं बहुत यकीन है कि के रूप में डेटा भेजने के लिए , आप पहले से ही प्लगइन के माध्यम से कर रहे हैं) और फिर आपको वेब एपीआई MultipartContent प्रदाताओं में से एक का उपयोग करके उस डेटा को निकालना होगा।

कैसे है कि करने के लिए समझा संसाधनों के बहुत सारे हैं:

1

एक ही बात मैं

हासिल किया यह मेरा अपलोड उपयोगकर्ता है कक्षा

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

} 

यह मैं

HttpRequestMessage उपयोग कर रहा हूँ ग्राहक के लिए सर्वर सर्वर से clinet के बीच स्थानांतरित डेटा के लिए इस कोड में मेरी एपीआई नियंत्रक वर्ग

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

है।