我已经创建了一个WCF Restful服务,其代码如下:
接口:
[ServiceContract]
public interface ISIGService
{
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Xml,
BodyStyle = WebMessageBodyStyle.Bare,
UriTemplate = "GetMultimedia/{id}")]
Stream GetMultimedia(string id);
}实现此服务的代码:
public Stream GetMultimedia(string id)
{
string filePath = MultimediaBLL.GetFilePath(int.Parse(id));
if (string.IsNullOrEmpty(filePath))
return null;
try
{
FileStream multimediaFileStream = File.OpenRead(filePath);
return multimediaFileStream;
}
catch (Exception ex)
{
Console.WriteLine("Not able to get multimedia stream:{0}", ex.Message);
throw ex;
}
}到目前为止,我需要使用这个获得多媒体文件(图像、音频或视频)文件的服务:
RestClient client = new RestClient(urlService);
RestRequest request = new RestRequest
{
Method = Method.GET,
RequestFormat = DataFormat.Xml,
Resource = "GetMultimedia/{id}"
};
request.AddParameter("id", idMultimedia, ParameterType.UrlSegment);
var response = client.Execute(request);
if (!response.StatusCode != HttpStatusCode.OK)
return;
???我不知道如何获取流并处理它,以便在处理程序中显示它,如下所示:
context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.AddHeader("Content-Length", bytes.Length.ToString());
context.Response.BinaryWrite(bytes);
context.Response.End();我想我必须获得文件字节才能将其发送给处理程序。
发布于 2015-09-02 19:54:29
我不知道这是不是你想要做的事。
服务
public Stream GetMultimedia(string id)
{
string filePath = MultimediaBLL.GetFilePath(int.Parse(id));
if (string.IsNullOrEmpty(filePath))
return null;
try
{
FileStream multimediaFileStream = File.OpenRead(filePath);
WebOperationContext.Current.OutgoingResponse.ContentType = "Your/contentType";
WebOperationContext.Current.OutgoingResponse.Headers["Content-Disposition"] = "attachment; filename=Your_file_name.png";
return multimediaFileStream;
}
catch (Exception ex)
{
Console.WriteLine("Not able to get multimedia stream:{0}", ex.Message);
throw ex;
}
}客户端
RestClient client = new RestClient(urlService);
RestRequest request = new RestRequest
{
Method = Method.GET,
RequestFormat = DataFormat.Xml,
Resource = "GetMultimedia/{id}"
};
request.AddParameter("id", idMultimedia, ParameterType.UrlSegment);
context.Response.Clear();
content.Response.ClearHeaders();
# write original responseStream to the context.Response.OutputStream
request.ResponseWriter = (responseStream) => responseStream.WriteTo(context.Response.OutputStream);
var response = client.DownloadData(request);
# maybe you need to add content type and file name as well
context.Response.AddHeader("Content-Type", "fetch from response");
context.Response.AddHeader("Content-Disposition", "fetch from response");
context.Response.Flush();
context.Response.Close();
context.Response.End();
if (!response.StatusCode != HttpStatusCode.OK)
# do somethinghttps://stackoverflow.com/questions/32305724
复制相似问题