41

次のコードを使用して、MemoryStream オブジェクトにある pptx をストリーミングしていますが、それを開くと、PowerPoint で修復メッセージが表示されます。MemoryStream を Response オブジェクトに書き込む正しい方法は何ですか?

HttpResponse response = HttpContext.Current.Response;
response.Clear();
response.AppendHeader("Content-Type", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.pptx;", getLegalFileName(CurrentPresentation.Presentation_NM)));                
response.BinaryWrite(masterPresentation.ToArray());
response.End();
4

8 に答える 8

72

私は同じ問題を抱えていましたが、うまくいった唯一の解決策は次のとおりです。

Response.Clear();
Response.ContentType = "Application/msword";
Response.AddHeader("Content-Disposition", "attachment; filename=myfile.docx");
Response.BinaryWrite(myMemoryStream.ToArray());
// myMemoryStream.WriteTo(Response.OutputStream); //works too
Response.Flush();
Response.Close();
Response.End();
于 2013-04-07T23:58:39.747 に答える
7

PowerPoint プレゼンテーションを MemoryStream で作成する代わりに、Response.OutputStream. この方法では、コンポーネントが出力をネットワーク ソケット ストリームに直接ストリーミングするため、サーバー上のメモリを浪費する必要はありません。したがって、このプレゼンテーションを生成する関数に MemoryStream を渡す代わりに、Response.OutputStream を渡すだけです。

于 2012-12-08T16:18:05.360 に答える
4

最初にメモリ ストリームに書き込む必要があります。次に、メモリ ストリーム メソッド「WriteTo」を使用して、以下のコードに示すようにページのレスポンスに書き込むことができます。

   MemoryStream filecontent = null;
   filecontent =//CommonUtility.ExportToPdf(inputXMLtoXSLT);(This will be your MemeoryStream Content)
   Response.ContentType = "image/pdf";
   string headerValue = string.Format("attachment; filename={0}", formName.ToUpper() + ".pdf");
   Response.AppendHeader("Content-Disposition", headerValue);

   filecontent.WriteTo(Response.OutputStream);

   Response.End();

FormName は与えられた fileName です。このコードは、PopUp を呼び出して、生成された PDF ファイルをダウンロード可能にします。

于 2014-02-20T09:35:20.550 に答える
4

これで試してください

Response.Clear();
Response.AppendHeader("Content-Type", "application/vnd.openxmlformats-officedocument.presentationml.presentation");
Response.AppendHeader("Content-Disposition", string.Format("attachment;filename={0}.pptx;", getLegalFileName(CurrentPresentation.Presentation_NM)));
Response.Flush();                
Response.BinaryWrite(masterPresentation.ToArray());
Response.End();
于 2012-12-08T16:24:20.947 に答える
0

同じ問題がありました。これを試してください:MemoryStreamにコピー->ファイルを削除->ダウンロード。

string absolutePath = "~/your path";
try {
    //copy to MemoryStream
    MemoryStream ms = new MemoryStream();
    using (FileStream fs = File.OpenRead(Server.MapPath(absolutePath))) 
    { 
        fs.CopyTo(ms); 
    }

    //Delete file
    if(File.Exists(Server.MapPath(absolutePath)))
       File.Delete(Server.MapPath(absolutePath))

    //Download file
    Response.Clear()
    Response.ContentType = "image/jpg";
    Response.AddHeader("Content-Disposition", "attachment;filename=\"" + absolutePath + "\"");
    Response.BinaryWrite(ms.ToArray())
}
catch {}

Response.End();
于 2014-09-24T08:54:24.947 に答える