2013-08-23 13 views
8

これは私のコードであり、docxファイルをダウンロードするために何時間も努力しています。成功はない。 私が遅れているかもしれないところでは、少しのヒントが必要です。C#を使用してdocxファイルをダウンロードすることができません

if (File.Exists(sTempPath + sCreateFileName)) 
      { 
       FileInfo file =new FileInfo(sTempPath + sCreateFileName); 
       Response.ClearContent(); 
       // LINE1: Add the file name and attachment, which will force the open/cancel/save dialog to show, to the header 
       Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
       // Add the file size into the response header 
       Response.AddHeader("Content-Length", file.Length.ToString()); 
       // Set the ContentType       
       Response.ContentType = ReturnExtension(file.Extension.ToLower()); 
       // Write the file into the response (TransmitFile is for ASP.NET 2.0. In ASP.NET 1.1 you have to use WriteFile instead) 
       Response.TransmitFile(sTempPath + sCreateFileName); 
       // End the response 
       HttpContext.Current.ApplicationInstance.CompleteRequest(); 
      } 

と戻り、コンテンツタイプ、DOCXファイルのコンテンツタイプできます:sTempPath + sCreateFileNameは、ファイルのパス全体である場合

"application/ms-word" 

更新: 私は、コンテンツタイプを試してみました:

application/vnd.openxmlformats-officedocument.wordprocessingml.document 

これは動作しません。

+1

あなたはどんなエラーがありますか? –

+0

コンテンツタイプを 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'として試してください – Damith

+0

ファイルはダウンロードされていませんが、エラーはありません。 –

答えて

8

DOCXの正しいMIMEタイプはapplication/mswordではなく、application/vnd.openxmlformats-officedocument.wordprocessingml.documentです。

指定したMIMEタイプはDOCファイル用です。

また、CompleteRequest()の代わりにResponse.Flush()Response.End()を入力することもできます。

+0

これも動作していない、私は同じを試してみました。 –

+0

Iti、私は私の返事を修正しました。 –

+0

これは、前のコードは機能しますが、ボタンのクリックでは機能しませんが、ページの読み込みでは機能します。なぜこれが起こっているのか分からないのですか? –

2

string FileName = Path.Combine(Server.MapPath("~/physical folder"), attFileName); 
      System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
      response.ClearContent(); 
      response.Clear(); 

    Response.AddHeader("Content-Disposition", string.Format("attachment; filename = \"{0}\"", System.IO.Path.GetFileName(FileName))); 
      response.TransmitFile(FileName); 
      response.Flush(); 
      response.End(); 
+0

Syedさん、ありがとうございました。 –

1

このコードを試してみてください、私は同じ問題を抱えていました。私のためにそれは動作します:

using (FileStream fileStream = File.OpenRead(filePath)) 
{ 
    MemoryStream memStream = new MemoryStream(); 
    memStream.SetLength(fileStream.Length); 
    fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length); 

    Response.Clear(); 
    Response.ContentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; 
    Response.AddHeader("Content-Disposition", "attachment; filename=myfile.docx"); 
    Response.BinaryWrite(memStream.ToArray()); 
    Response.Flush(); 
    Response.Close(); 
    Response.End(); 
} 
関連する問題