2013-08-29 118 views
1

我有一個WPF應用程序和一個ASP.NET MVC網站。 WPF應用程序使用Kinect捕獲圖像,並將這些圖像保存爲文件。我想要做的是將文件從WPF應用程序發送到ASP.NET MVC網站。使用POST發送圖像

我已經嘗試了以下方法,它從圖像文件獲取字節並將其轉換爲使用Base64的字符串,然後在另一端嘗試將字符串轉換回字節,然後返回到文件。整個過程工作,除了最後的文件損壞,不會加載。

也是發送文件的正確方式,或者我會更好地嘗試使用套接字?

WPF應用

var imageUrl = "http://127.0.0.1:18710/Home/Index"; 

//byte[] imageBytes = set.getImageBytes(); 
byte[] imb = System.Text.Encoding.UTF8.GetBytes("imagename=" + ImageName + ".png&image=" + Convert.ToBase64String(File.ReadAllBytes(ImageName + ".png"))); 

var imageReq = (HttpWebRequest)WebRequest.Create(imageUrl); 

imageReq.Method = "POST"; 
imageReq.ContentType = "application/x-www-form-urlencoded"; 
imageReq.ContentLength = imb.Length; 


using (Stream os = imageReq.GetRequestStream()) 
{ 
    os.Write(imb, 0, imb.Length); 
} 

ASP.NET MVC網站

if (image != null && imagename != null) 
{ 
    System.IO.File.WriteAllBytes(@"c:\" + imagename, Convert.FromBase64String(image)); 
} 

回答

3

你正在做一些編碼怪異的東西。這可能會更好,如果你通過文件名作爲標題..你可以通過使用HttpContext.Current.Request在MVC端獲取文件名。然後,只需改變你的RequestStream你正在寫在WPF應用程序,這樣的:

byte[] imb = File.ReadAllBytes(ImageName + ".png")));

+0

我怎麼重新組合的MVC側的文件嗎?當我查看Request.Form時,它有1037個不同的密鑰。 – PriestVallon

+0

將您的內容類型更改爲「image/png」。或應用程序/八位字節流,並使參數傳入您的索引頁面。「Stream myimagestream」,從那裏你應該能夠保存流,無論你想要的。 –

+0

流......只是一堆「東西」。你不應該害怕他們。-smiles-一旦你意識到這一點,並且大多數文件類型可以唯一識別流的前256個字節..你會是一個更快樂的人。 (Zip文件是256字節規則的例外..因爲很多文件真的是zip文件..現代PowerPoint文件.. jar文件..現代excel文件..) –