2

次のコードは、EPPlus ExcelPackage を作成して返すヘルパー メソッドにアクセスし、パッケージをブラウザーに返します。

public ActionResult DownloadMatrixExcel(int projectId)
        {
            try
            {
                // Get project details
                var project = (from p in db.Projects
                               where p.ProjectId == projectId
                               select new
                               {
                                   companyName = p.Company.Name,
                                   projectName = p.Name
                               }).Single();

                // Must append file type to file download responses
                var fileName = project.projectName + "-" + project.companyName + "-" + DateTime.Now.ToString("yyyyMMdd", CultureInfo.InvariantCulture) + ".xlsx";

                // Configure response
                Response.Clear();
                Response.BufferOutput = false;
                Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                Response.AddHeader("content-disposition", "attachment; filename=" + fileName);

                // Create and populate excel package
                var matrixSpreadsheet = ExcelHelper.BuildMatrixExcel(projectId);
                matrixSpreadsheet.SaveAs(Response.OutputStream);

            }
            catch (Exception e)
            {
                return Content("Error: " + e.Message);
            }

            // Download okay - No ViewResult
            return new EmptyResult();
        } 

私がテストしたすべてのブラウザーで正常に動作しますが、FireFox 18.0.1 (他の FF バージョンはまだテストしていません) は最初のスペースでファイル名をトリミングするため、"someproject - somecompany - thedate" は単に "someproject" になります。置換を実行してスペースを削除することはできますが、これにより一部のファイル名が少し​​奇妙に見えます。ファイル拡張子はそのままで、他の問題はないようですが、誰かが説明または修正を提供できるかどうか疑問に思いましたか?

4

2 に答える 2

5

ファイル名は引用符 ( "filename") で囲む必要があります。

于 2013-01-20T06:31:18.303 に答える
4

さて、別の問題を調査しているときに、ここで答えを見つけました:FireFoxのみでのファイルダウンロードの問題

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

これにより、FireFox のブラウザーで開くのではなく、保存することを選択したときに、ファイルに正しいコンテンツ タイプが与えられます。

于 2013-01-22T00:20:21.457 に答える