2012-03-07 4 views
1

サーバーからファイルをダウンロードする必要がありますが、可能であればインラインで開く必要があります。私は現在やっている。Open Word文書をクリックすると、ダウンロード中にコントローラアクションに再接続しようとします

Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", documentFileName)); 
result = new FileStreamResult(new FileStream(documentFilePath, FileMode.Open), "application/msword"); 

私はアプリケーション/ mswordをここに配置しました。なぜならそれは問題があるからです。 Word文書で[開く]をクリックすると、文書が複数の呼び出しをアクションに戻したようになりますが、セッションもデータベースもなく、クラッシュします。ユーザーがこれを実行しているときに、長いハングアップが表示され、「ダウンロード中」ダイアログが最後に表示され、キャンセルする必要があります。文書はそこにあり、有効ですが、これは望ましくありません。

Pdfs、pngsなどは正常にダウンロードできます。誰でもこの動作を説明し、私がそれをどのように修正するかについてのヒントを教えてもらえますか?

更新:

アクションは基本的に次のようになります。

[HttpPost] 
public FileResult View(int id, int source) 
{ 
    var document = GetDocumentFromDatabase(id, source); 

    documentFilePath = Path.Combine(documentsDirectory, document.Name); 
    documentName = document.Name; 

Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", documentFileName)); 
result = new FileStreamResult(new FileStream(documentFilePath, FileMode.Open), "application/msword"); 

return result; 
} 

私は詳細を共有することができないように私は、それをトリミングしましたが、完全なアイデアがあります。

回答:

私はそこに私は、ファイルがインラインまたは添付ファイルであるかどうかを定義している、と私はWord文書を検出したときに、私は添付ファイルに設定し、利用可能なコンテンツ・タイプの検索を持っています。もうエラーはありません。私はそれをインラインに設定しているので、PDFはブラウザで開きます。私が使用

+0

あなたはあなたの行動のためのコードの残りの部分を表示することができますか? – StanK

答えて

1

public ActionResult GetAttachment(int id) 
     { 

      var attachment = _repository.GetAttachByID(id); 
      if (attachment != null) 
      { 
       Response.AppendHeader("Content-Disposition",string.Format("inline; filename={0}",attachment.FileName)); 
       return File(attachment.File, attachment.MimeType, attachment.FileName); 
      } 
      else 
      { 
       return null; 
      }      
     } 

よろしく

+0

FileはFileStreamResultと同じ結果ですが、渡すパラメータに基づいて実際の型を決定しているようです。 – Hammerstein

関連する問題