2017-03-22 4 views
2

私は以下のコードを持っています。私は、GetMediaItemByIDが期待されるメディアアイテムを返すことを確認しました。そして、MIMEタイプは "application/pdf"です。しかし、私がこのコードを呼び出すコントローラーを押すと、Acrobatは結果のPDFファイルが無効であると訴える。私は結果のPDFファイルをテキストエディタで見て、それはバイナリデータです。私が間違っているアイデアは?WebAPIコールからSitecoreメディアアイテムを返す

public HttpResponseMessage RetrieveDocument(ID mediaID) 
{ 
    MediaItem file = GetMediaItemByID(mediaID); 

    Stream stream = file.GetMediaStream(); 
    MemoryStream ms = new MemoryStream(); 
    stream.CopyTo(ms); 

    var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(ms.GetBuffer()) }; 
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = file.Name + "." + file.Extension }; 
    result.Content.Headers.ContentType = new MediaTypeHeaderValue(file.MimeType); 

    return result; 
} 

答えて

2

私はms.GetBuffer())を使用しているとは思いません。あなたは、ms.GetBuffer()正しかった問題だった

Stream mediaStream = mediaItem.GetMediaStream(); 
var fileSize = mediaStream.Length; 
byte[] buffer = new byte[(int)fileSize]; 
mediaStream.Read(buffer, 0, (int)mediaStream.Length); 
mediaStream.Close(); 

var result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new ByteArrayContent(buffer) }; 
+0

は、代わりにこのコードを試してみてください。私はいつも同じものだと思っていましたが、それを読んで、違いがあります。 –