2016-04-22 14 views
0

ファイルを返すために、MVC 5アプリケーションに基本FilePathResultを書きました。正しく返されないファイルタイプは.xlsxです。 PDF'sなどのファイルが正常に動作します。MVCが適切なファイルタイプを返さない

public FilePathResult Download(int? id) 
{ 
    var model = db.DisciplineModels.Where(x=>x.Id == id).Include(i=>i.Employee).FirstOrDefault(); 
    string username = model.Employee.FirstName + " " + model.Employee.LastName; 
    string mimeType = MimeMapping.GetMimeMapping(model.Report_Filename); 
    string path = string.Format(@"~/Employee Records/{0}/HR/Discipline/{1}", username, model.Report_Filename); 
    return new FilePathResult(path, mimeType); 
} 

mimeTypeapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheetの正しいファイルタイプに戻って来ていると、ファイルパスが(ファイルがフォルダ内にあります)が正しいです。ファイルがブラウザにダウンロードされるまで、すべてうまくいくように見えます。拡張子のないファイルとして返されます。私はこのコンピュータにOfficeをインストールしていないが、それは問題になるだろうか? (その開発マシン、オフィスは必要ありません)。

アイデア?

+1

'.xlxs'に入力ミスがありますか? –

+0

はい、xlsxを意味します。 updated –

+0

'.xlsx'ファイルの実際の' model.Report_Filename'値は何ですか? –

答えて

1

Controller source codeによる編集

を開始します

protected internal virtual FilePathResult File(string fileName, string contentType, string fileDownloadName) 
{ 
    return new FilePathResult(fileName, contentType) { FileDownloadName = fileDownloadName }; 
} 

だからあなたのケースのためにあなたがreturn File(path, mimeType, model.Report_Filename);

エンド編集

と同じである return new FilePathResult(path, mimeType) { FileDownloadName = model.Report_Filename };を使用しようとするかもしれません

あなたweb.configに次のセクションを追加してみてください:

<configuration> 
    <system.webServer> 
     <staticContent> 
      <mimeMap fileExtension=".xlsx" mimeType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /> 
     </staticContent> 
    </system.webServer> 
</configuration> 
+0

同じことが起こります。ファイルが拡張子なしで出てくる –

+0

@Shawn Gavett、理由が長すぎる 'path'にある可能性がありますか? –

+0

@Shawn Gavett、 'return new FilePathResult(model.Report_Filename、mimeType);' –

1

FileFilePathResultから戻り値の型を変更することで、私は期待どおりに動作するように取得することができました。

は、このために、このreturn new FilePathResult(path, mimeType);ない

return File(path, mimeType, model.Report_Filename);に必ず理由 FilePathResult didntの仕事を変更しました。 (どんな洞察力も大変ありがとうございます)。

+1

[sources](http://aspnetwebstack.codeplex.com/SourceControl/latest#src/System)に従って、 'return new FilePathResult(path、mimeType){FileDownloadName = model.Report_Filename}; .Web.Mvc/Controller.cs)( 'File'メソッドを探します)。おそらく、 '.pdf'ブラウザが正しい名前を自動的に導き出すことが可能な場合です。 –

関連する問題