簡體   English   中英

C# WebAPI 使用 memory stream 下載 PowerPoint 文件

[英]C# WebAPI to download PowerPoint file using memory stream

到目前為止,這是我下載 powerpoint 文件的代碼。 我使用 aspose package 作為 powerpoint 這是 aspose 文檔https://docs.aspose.com/dashboard.action的鏈接

    [HttpGet]
    [Route("exportpowerpoint1")]
    public HttpResponseMessage Export()
    {           
        using (Presentation presentation = new Presentation(HttpContext.Current.Server.MapPath("~/PPTexports/testfile.pptx")))
        {
            MemoryStream stream = new MemoryStream();
            presentation.Save(stream, SaveFormat.Pptx);
            stream.Position = 0;
            var returnResult = Request.CreateResponse(HttpStatusCode.OK);
            returnResult.Content = new StreamContent(stream);
            returnResult.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.presentationml.presentation");
            returnResult.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = "testfile.pptx"
            };                
            return returnResult;
        }}

使用此代碼,我可以下載文件,但是當我打開文件時,powerpoint 會給出此錯誤消息,並且文件的大小也會加倍

錯誤信息:powerpoint 在 testfile.pptx 中發現不可讀的內容

我認為 memory stream 將文件寫入兩次,這是由於內容重復而導致文件大小加倍並且文件無法打開的原因,但我無法找到問題的原因有人可以幫忙嗎?

嘗試這個:

[HttpGet]
[Route("exportpowerpoint1")]
public HttpResponseMessage Export()
{   
    var returnResult = Request.CreateResponse(HttpStatusCode.OK);
    returnResult.Content = new StreamContent(File.OpenRead(HttpContext.Current.Server.MapPath("~/PPTexports/testfile.pptx")));
    returnResult.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.presentationml.presentation");
    returnResult.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
    {
        FileName = "testfile.pptx"
    };                
    return returnResult;
}

不要做我所做的並將 MemoryStream 放在 using 塊中......您將不會收到任何響應,因為它在發送內容之前已被處置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM