2012-02-26 2 views
3

꽤 큰 응용 프로그램의 일부로 이미지를 업로드하는 REST 서비스를 제공해야합니다. 전체 응용 프로그램이. NET이기 때문에 나는 WCF RESTFul 서비스의 예제를 찾으려고 노력했지만 그럴 수는 없지만 전체 구성을 정의합니다. 몇 가지 예가 온라인이지만 WCF에 대한 지식이 부족하여 아무 것도 작동하지 못하게되었습니다. (계속 예외가 발생합니다.)WCF RESTFul 서비스를 사용하여 이미지 업로드 전체 작동 예제

나는 제대로 작동하는 것에 연결해 드리겠습니다.

+0

다른 작업 예제는 다음과 같습니다. http://stackoverflow.com/questions/9451141/uploading-an-image-using-wcf-restful-service-full-working-example/34913111#34913111 –

답변

8

찾아주세요 아래 샘플 : 서버에서

:

인터페이스 :

[WebInvoke] 
string PostImage(Stream stream); 

내 구현 클래스 :

public string PostImage(Stream stream) 
     { 
      byte[] buffer = new byte[10000]; 
      stream.Read(buffer, 0, 10000); 
      FileStream f = new FileStream("C:\\temp\\sample.jpg", FileMode.OpenOrCreate); 
      f.Write(buffer, 0, buffer.Length); 
      f.Close(); 
      stream.Close(); 
      return "Recieved the image on server"; 
     } 

참고 : 있는지 확인하십시오 당신의 WCF 서비스 응용 프로그램 응용 프로그램 풀 ID에 파일을 쓰려면 c : \ Temp 위치에 대한 쓰기 권한이 있습니다. 또는 이미지를 db 또는 원하는 다른 방법으로 저장하는 논리를 바꿀 수 있습니다. 서버에서

내 Web.config의 :

var client = new RestClient(); 
client.BaseUrl = "http://localhost/XMLService/Service1.svc"; 
var request = new RestRequest(method) { DateFormat = DataFormat.Xml.ToString(), Resource = resourceUrl }; 
if(requestBody !=null) 
     request.AddParameter("objCompositeType", requestBody); 
request.AddFile("stream", image, "Array.png");  
var response = client.Execute(request); 
string responseString; 
if (response.StatusCode == HttpStatusCode.OK) 
{ 
    responseString = HttpUtility.HtmlDecode(response.Content); 
} 
else 
{ 
    responseString = response.StatusDescription + " --------------------" + HttpUtility.HtmlDecode(response.Content); 
} 

나는 REST에 내 요청을 게시 타사 도구 RestSharp을 사용하고 있습니다 : 내 클라이언트에 지금

<services> 
     <service name="XMLService.Service1" behaviorConfiguration="default"> 
     <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="RestBinding" name="Service1" contract="XMLService.IService1" /> 
     </service> 
</services> 
<behaviors> 
     <endpointBehaviors> 
     <behavior name="web"> 
      <webHttp /> 
     </behavior> 
    <serviceBehaviors>   
    <behavior name="default"> 
     <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     <serviceMetadata httpGetEnabled="true" /> 
     <serviceDebug includeExceptionDetailInFaults="true" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
<webHttpBinding> 
<binding name="RestBinding"> 
    <readerQuotas maxStringContentLength="5242880" maxArrayLength="16384" maxBytesPerRead="4096" /> 
    <security mode="None">    
    </security> 
    </binding> 
</webHttpBinding> 

나는 다음과 같은 코드가 있습니다 서비스.

피들러 나의 요청이 같이 보입니다 :

POST http://localhost/XMLService/Service1.svc/PostImage HTTP/1.1 
Accept: application/json, application/xml, text/json, text/x-json, text/javascript, text/xml 
User-Agent: RestSharp 102.0.0.0 
Host: rajeshwin7 
Content-Type: multipart/form-data; boundary=-----------------------------28947758029299 
Content-Length: 2300 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 

-------------------------------28947758029299 
Content-Disposition: form-data; name="stream"; filename="download.jpg" 
Content-Type: application/octet-stream 

�����JFIF����������C�  
!#'**%%+7,$3)1-,*4696A),,5���C 


6$$555,,)404,)6,51,5),)+)),,0,.044,),1),)),)))42,,,0,���"��"������������������.�������!1"AQ2a�#q�B�Rr���������������������������������1�����?��4��������������������ՇOF��¼�(�%�az�ROw����l"���Z��g}J�qWR��ʜR�K)�;���<&���G��kw���K���):1���������`�\�B;e(�:u"����.���_��QS�iB)�2�w�{��Q���k�%�e�xU�^�!Bw~��b�)����-,���e��=k���s��v���}� ���$�}2}���o�>5N��Ҟ����YхL���T��)=��|�gu�B^ѕͽ&�:st���J�8ae�/�O-%��I��� 
ES��}�$��MI7',nK8̟xG���m��F��ʤ�K�g)�n^=�#ǎ1�����{P�� 
��U5)8��儞��8k��N�f����8�ʧu�S�M9��I�K8M�xY���������������j�EZӖ�[Y�O�ۓ(t�ޥH�W�K2�~�M�cn�����M_�����&�K��g������夳�l;��}%A�if�f��Q�MB{1�xofs�u�sX�qsW���T��)V���ʦ'��<���饎S���Y�t 
�=�i�R�:nJsm�U̜T���-���,�6U��s��Nڞ���j�_�r�5OӜ��8�%������������������V���N��as���>_<J��v�:p�BݸO��A�&㕞q���>L}N���a{����տX�U�Ӣ�C���~�XϜe�]���3NrWZ���M(F�kd%'��{0���4�����U}M]J����ue���ia%��?���+K��n]��i���n����Mgң,����S��~�W�޶V�)m�95ы�Rm��q��ı��P� 
m5_wjQ�ҩ��m,.��Rry^��o��}�O�y^9�N��MT�G��2�9G���+>7=^�^��J4��1�%%���*YMK�Z�s�5)��Y�U�y:pj۹:*S�mU%�y���24��I)-�qĖ$�����C]�J�4�(�����⛬��d����g�fv�;R�԰��yO�+������������������([Z�VЎT�R�Jks�K���8Ͽ 
�4�Wv6�m�6��K�y^y 
��u������E��������'E�Pꗯu���ģ� 
M5������8b�5{�ҧV�IB2\6��o̤���O���<�Ԛ�GVR��g�7��,<���<��|���Q��T���CRx�ӏ�>1��V���uj<�7'�r�O������������������)B֜�S�Y�ħ�����z�P�8W�$��n~�S�M�?u�<��������������������]����/�:j+n"���I��ܟ�?��,���'F�c�ytҕ%&�4��k9��0�����������������������i�[FP���9֡����7����,���h�S��_d����������������������%V�XSuj턽1sQ����yϟu��yŕ�i�)Е*�IŶ�W��Y� 
&���K�H ��������������������K�q 
zRV�8�#:p���krk>�>�-�='�Ժ{��U}�e� 
������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� 
-------------------------------28947758029299-- 

을 그리고 내가 위의 요청의 POST를 수행 할 때 내가 아래에 응답을 얻을 :

여기
HTTP/1.1 200 OK 
Cache-Control: private 
Content-Length: 105 
Content-Type: application/xml; charset=utf-8 
Server: Microsoft-IIS/7.5 
Set-Cookie: ASP.NET_SessionId=fdbg45tergdsfg434t; path=/; HttpOnly 
X-AspNet-Version: 4.0.30319 
X-Powered-By: ASP.NET 
Date: Mon, 27 Feb 2012 12:05:32 GMT 

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">Recieved the image on server</string> 
+2

예제가 있습니까? 아약스 고객의? –

1

내가 무엇을했는지 있습니다 :

C# Windows 콘솔 응용 프로그램 만들기

class Program 
{ 

    static void Main(string[] args) 
    { 
     Console.WriteLine("hello World"); 

     System.Uri url = new System.Uri("http://192.168.1.12:81/WebService/BIITAlumni.svc/UploadImage"); 
     string filePath = @"F:\temp\Desert.jpg"; 



      HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
      request.Accept = "application/octet-stream"; 
      request.Method = "POST"; 
      request.ContentType = "image/jpeg"; 
      using (Stream fileStream = File.OpenRead(filePath)) 
      using (Stream requestStream = request.GetRequestStream()) 
      { 
       int bufferSize = 1024; 
       byte[] buffer = new byte[bufferSize]; 
       int byteCount = 0; 
       while ((byteCount = fileStream.Read(buffer, 0, bufferSize)) > 0) 
       { 
        requestStream.Write(buffer, 0, byteCount); 
       } 
      } 
      string result; 
      using (WebResponse response = request.GetResponse()) 
      using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
      { 
      result = reader.ReadToEnd(); 
      } 
      Console.WriteLine(result); 
    } 
    } 
(210)

는 WCF 서비스의 새로운 프로젝트도
<system.serviceModel> 
<bindings> 
    <webHttpBinding> 
    <binding name="ServiceWebBindingName" transferMode="Streamed" maxReceivedMessageSize="2147483647" > 
     <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" /> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Windows"></transport> 
     </security> 
    </binding> 
    </webHttpBinding> 
</bindings> 

    <!-- your other configuration goes here--> 
</system.serviceModel> 

즐길 수 Web.config의

너무
namespace AlumniService{ 

[ServiceContract] 
public interface IBIITAlumni 
{ 

    [OperationContract] 
    [WebInvoke(
     Method = "POST", 
     UriTemplate = "/UploadImage", 
     RequestFormat = WebMessageFormat.Json, 
     ResponseFormat = WebMessageFormat.Json)] 

    public string UploadImage(Stream stream) 
    { 
     byte[] buffer = new byte[10000]; 
     stream.Read(buffer, 0, 10000); 
     FileStream f = new FileStream(@"C:\Users\shahzad\Documents\Visual Studio 2013\Projects\AlumniService\FileUpload\sample.jpg", FileMode.OpenOrCreate); 
     f.Write(buffer, 0, buffer.Length); 
     f.Close(); 
     stream.Close(); 
     return "Recieved the image on server"; 
    } 

    } 
} 

변경

IBIITAlumni 인터페이스 코드에서 namespace AlumniService를 제거하고 자신의 네임 스페이스를 대체 만들기!

관련 문제