2012-10-30 45 views
1

我有一個用C#編寫的webform應用程序,我想要做的是在用戶提交一個帶有圖像的HTML表單後,我將該圖像發送到也用C#編寫的WCF Rest服務。 問題是當我在Web服務中得到這個圖像時,它已經損壞。轉發已過期的圖像到WCF Rest服務

我想問題是我沒有正確編碼文件,但在互聯網上閱讀了幾天後,我還沒有發現線索。

網絡表單代碼:

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

謝謝卡洛斯,它的工作!您的其他選項似乎也是一個好主意! –