2015-10-02 19 views
5

サーバルートからイメージを返そうとしていますが、0バイトを取得しています。私はそれが私がどのようにMemoryStreamを使用しているかと関係があると考えています。ここに私のコードです:私はPdfToImagesメソッドが動作していることを確認したデバッグを通じRoute Cからデータを受信して​​いない

[HttpGet] 
[Route("edit")] 
public async Task<HttpResponseMessage> Edit(int pdfFileId) 
{ 
    var pdf = await PdfFileModel.PdfDbOps.QueryAsync((p => p.Id == pdfFileId)); 

    IEnumerable<Image> pdfPagesAsImages = PdfOperations.PdfToImages(pdf.Data, 500); 
    MemoryStream imageMemoryStream = new MemoryStream(); 
    pdfPagesAsImages.First().Save(imageMemoryStream, ImageFormat.Png); 

    HttpResponseMessage response = new HttpResponseMessage(); 
    response.Content = new StreamContent(imageMemoryStream); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/png"); 
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
    { 
     FileName = pdf.Filename, 
     DispositionType = "attachment" 
    }; 
    return response; 
} 

とそのimageMemoryStreamがそれを実行するに

pdfPagesAsImages.First().Save(imageMemoryStream, ImageFormat.Png); 

しかしラインからのデータで埋めます、私は、添付ファイルを受信します正しく指定されていますが0バイトです。ファイル全体を受け取るためには何を変更する必要がありますか?私はそれが何かシンプルだと思っていますが、私は何がわかりません。前もって感謝します。

+0

多分あなたは0にストリームの位置を設定する必要がありますか? 'imageMemoryStream.Position = 0;' –

答えて

2

MemoryStreamに書き込んだ後、Flushは、それを0にPositionを設定します。あなたが応答に渡す前に先頭にMemoryStreamを巻き戻す必要があります

imageMemoryStream.Flush(); 
imageMemoryStream.Position = 0; 
0

。しかし、PushStreamContentを使用するのが良いでしょう:

HttpResponseMessage response = new HttpResponseMessage(); 
response.Content = new PushStreamContent(async (stream, content, context) => 
    { 
    var pdf = await PdfFileModel.PdfDbOps.QueryAsync(p => p.Id == pdfFileId); 
    content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") 
    { 
     FileName = pdf.Filename, 
     DispositionType = "attachment" 
    }; 

    PdfOperations.PdfToImages(pdf.Data, 500).First().Save(stream, ImageFormat.Png); 
    }, "image/png"); 
return response; 
+0

'PushStreamContent'の使用に関する令状は何ですか? –

+0

'MemoryStream'に余分なメモリを割り当てる必要はありません。 –

+0

コードのテストでは、添付ファイルではなくインラインで行われます。理由は何ですか? –

関連する問題