我成功地創建了一個應用程序,可以將從我的Windows Phone發出的請求發送到以蔚藍色的Web角色託管的WCF api。我使用restful POST方法來使用RestSharp來完成此操作。這一切都非常出色,圖像出現在存儲器中,但圖像不能像普通圖像文件那樣打開。使用RestSharp將圖像上傳到WCF Api - 圖像無效
將它們與我之前上傳的其他圖像進行比較,在元數據信息中,它表示不可查看的圖像具有設置爲「AKEYWqGgulwi6/9/VY2KPg ==」之類的contentMD5字段(而其他圖像可以)是什麼導致文件的問題?
我附上了我的RestSharp代碼,也許我正在添加一些我不應該的東西?我懷疑這個錯誤必須來自這裏,因爲這是圖像流操作的唯一地方。
public void SendRequest(Stream imageStream, string imageID)
{
var client = new RestClient();
client.BaseUrl = apiAddress;
var request = new RestRequest("agerecog/{imageName}", Method.POST);
request.AddUrlSegment("imageName", imageID);
//convert imagestream to byte array
var byteArray = new byte[imageStream.Length];
imageStream.Read(byteArray, 0, (int)imageStream.Length);
//add byteArray to request
request.AddFile("image/jpeg", byteArray, imageID);
var url = client.BuildUri(request).ToString();
client.ExecuteAsync<VizageResponse>(request, response =>
{
//request info. to be added here
});
}
編輯#1 一些工作之後,我決定改變addFile行這樣的:
request.AddFile(null, byteArray, null);
從而改變流長,也取得了contentMD5字段爲空。但是,圖像仍然不是有效的圖像文件。鑑於我比較的圖像都來自Windows Phone模擬器,它們都應該是一個相同的白色頁面,並且在角落有一個小的黑色方塊 - 但是文件之間的大小不同(有效圖像文件的長度爲5670 ,6076長度爲原來的代碼,並使用上述第二addFile)
EDIT#2 做一些更多的分析,當流被髮送其長度屬性是6116的圖像之前,當它到達在6239長度服務器,但它是6370.我正在從RestSharp方法的某個地方添加264,我相信或者當數據流在服務器端解釋時。 WCF服務代碼:
[WebInvoke(UriTemplate = "/agerecog/{imageName}", Method = "POST")]
VizageResult analyseFace(string imageName, Stream imageStream);
你能把請求和提琴手比較嗎?您可能還希望將AddFile重載直接寫入流。 – 2012-04-25 01:04:43
感謝John,不幸的是我無法使用提琴手,因爲azure服務託管在我的本地開發環境中。然而,我做了一些調查工作,我將添加到上面的編輯中。我將直接寫入流以及 – 2012-04-25 09:06:17
直接流到流沒有出現工作或者不幸 – 2012-04-25 13:05:05