내 Windows Phone에서 하늘색 웹 역할로 호스팅되는 WCF API로 요청을 보내는 앱을 성공적으로 만들었습니다. RestSharp를 사용하여 편안한 POST 메서드를 사용하고 있습니다. 모든 것이 훌륭하게 작동하고 이미지가 저장 공간에 나타나지만 이미지가 일반 이미지 파일로 열리지 않습니다.RestSharp를 사용하여 WCF API에 이미지 업로드 - 이미지가 유효하지 않음
메타 데이터 정보에 이전에 업로드 한 다른 이미지와 비교하면 볼 수없는 이미지에 "AKEYWqGgulwi6/9/VY2KPg =="과 같은 내용으로 설정된 contentMD5 필드가 있습니다 (다른 사람은 그렇지 않지만). 파일에 어떤 문제가 발생 했습니까?
RestSharp 코드를 첨부했는데, 내가하지 말아야 할 부분을 추가하고 있습니까? 이것이 imagestream이 조작되는 유일한 장소이기 때문에 내가 의심하는 오류가 여기에서 왔음에 틀림 없습니다.
request.AddFile(null, byteArray, null);
스트림의 길이를 변경하고 또한 contentMD5 필드가 비어 만든 :
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 라인을 변경하기로 결정했다. 그러나 이미지는 여전히 유효한 이미지 파일이 아닙니다. 실제로 비교할 이미지는 Windows Phone 에뮬레이터에서 가져온 것이므로 모서리에 검은 색 사각형이있는 동일한 흰색 페이지 여야합니다. 그러나 파일 사이에는 크기가 다릅니다 (유효 이미지 파일의 길이는 5670입니다. 원래 코드 6076 길이가에 도착하면, 상기 제 addFile)EDIT # 2 상기 화상 전에 스트림 길이 속성이 6116 인 전송 될 때, 좀 더 분석 수행을 사용하여 6239 길이 서버이지만 6370입니다. 264는 RestSharp 메소드의 어딘가에서 추가되었거나 데이터 스트림이 서버 측에서 해석 될 때 추가됩니다. WCF 서비스 코드 :
[WebInvoke(UriTemplate = "/agerecog/{imageName}", Method = "POST")]
VizageResult analyseFace(string imageName, Stream imageStream);
Fiddler와 요청을 비교할 수 있습니까? 스트림에 직접 쓰는 AddFile 오버로드가 필요할 수도 있습니다. –
감사합니다. John, 불행히도 하늘빛 서비스가 내 로컬 개발 환경에서 호스팅되기 때문에 피들을 사용할 수 없습니다. 그러나 위의 편집에 추가 할 작업을 조금 조사했습니다. 나는 스트림에 직접 글을 쓸 것입니다. –
스트림을 직접 스트리밍하는 것은 불행히도 작동하지 않는 것 같습니다. –