2012-10-30 2 views
1

C#으로 작성된 웹 폼 응용 프로그램이 있습니다. 사용자가 이미지와 함께 HTML 양식을 제출 한 후 해당 이미지를 C#으로 작성된 WCF Rest 서비스에 보냅니다. 문제는 웹 서비스에서 이미지가 손상되어 손상된 것입니다.앞으로 게시 된 이미지를 WCF Rest Service에 전달하십시오.

내가 파일을 제대로 인코딩하지 않는다고 생각하지만, 인터넷에서 읽은 후 필자는 실마리를 찾지 못했습니다.

웹 양식 코드 :

protected void Page_Load(object sender, EventArgs e) 
{ 
    HttpPostedFile image = Request.Files["imagen"]; 
    string serverResponse = Send("mywebservice/postimage", "POST", Encoding.UTF8.GetBytes(StreamToString(image.InputStream))); 
} 

편집 (이 방법으로 일)

protected void Page_Load(object sender, EventArgs e) 
{ 
    HttpPostedFile image = Request.Files["imagen"]; 
    MemoryStream ms = new MemoryStream(); 
    image.InputStream.CopyTo(ms); 
    byte[] bytes = ms.ToArray(); 
    string serverResponse = Send("mywebservice/postimage", "POST", bytes); 
} 


public int Send(string url, string method, byte[] data) 
{ 
    string serverResponse = ""; 
    HttpWebRequest newRequest = (HttpWebRequest)WebRequest.Create(url); 

    newRequest.ContentType = "image/jpeg"; 
    newRequest.Method = method; 
    newRequest.Timeout = 10000; 


    if (newRequest.Method == "POST" || newRequest.Method == "PUT") 
    { 
     Stream reqStream = newRequest.GetRequestStream(); 
     reqStream.Write(data, 0, data.Length); 
     reqStream.Close();   
    } 

    WSMessageEnt wsMessageEnt = new WSMessageEnt(); 

    try 
    { 
     HttpWebResponse webResponse; 
     webResponse = (HttpWebResponse)newRequest.GetResponse(); 
     Stream dataStream = webResponse.GetResponseStream(); 
     serverResponse = new StreamReader(dataStream).ReadToEnd(); 

    } 
    catch (WebException we) 
    { 

    } 

    return serverResponse; 
} 

public static string StreamToString(Stream data) 
{ 
    StreamReader reader = new StreamReader(data); 
    string body = reader.ReadToEnd(); 
    reader.Close(); 
    reader.Dispose(); 

    return body; 
} 

Webservice를 코드 :

[WebInvoke(UriTemplate = "upload-user-image", Method = "POST")] 
public Stream UploadUserImage(Stream streamdata) 
{ 
    System.Drawing.Image img = System.Drawing.Image.FromStream(streamImagen, true); 
    // here I get a format error 
} 
+0

오류 메시지를 제공해 주시겠습니까? – digaomatias

+0

스페인어로되어 있지만 "잘못된 인수/매개 변수"와 같은 내용이 있습니다. –

답변

1

아마도 하나의 문제가 있습니다. 바이트 스트림을 문자열로 변환 한 다음 다시 바이트 스트림으로 변환하는 것입니다. 이미지 바이트는 임의의 바이트로 문자열에 매핑되거나 매핑되지 않을 수 있으며 한 변환에서 사용하는 인코딩 (Encoding.Default)은 다른 인코딩 (Encoding.UTF8)에서 사용 된 것과 다를 수 있습니다. 대신이 일을

:

Encoding.UTF8.GetBytes(StreamToString(image.InputStream)) 

MemoryStream ms = new MemoryStream(); 
image.InputStream.CopyTo(ms); 
byte[] bytes = ms.ToArray(); 

같은 일을 시도하거나 Send에 스트림을 전달하고이 요청 스트림에 복사합니다.

+0

카를로스 감사합니다. 다른 옵션도 좋은 생각 인 것 같습니다! –

관련 문제