2017-03-22 72 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())做你期望它做。

試試這個代碼,而不是:

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

你是正確的,ms.GetBuffer()是問題。我一直認爲它們是一樣的,但是閱讀它就會發現它們有所不同。 –

相關問題