使用相同的方法下载不同的文件

时间:2016-11-08 10:21:08

标签: c# asp.net asp.net-mvc

我目前正在开发一个Web应用程序,我正在使用C#和Asp.Net MVC。在其中一个页面上,我有一个要求,即用户可以下载文件并填写相关数据,然后上传它们。由于某些用户使用旧机器,我正在使用.xls.xlsx。可以下载哪个文件基于用户必须选择的下拉值。

我有两个按钮,一个用于.xls,另一个用于xlsx文件。我的问题是如何使用相同的后端代码在文件之间进行交换。因此,如果点击.xls,则用户获取.xls文件,如果另一个文件被点击,则会收到.xlsx个文件。

到目前为止,这是我的代码:

public FileResult DownloadTemplates(string policyType)
{
   string templateName = string.Empty;
   string baseDirectory = "base path";
   string templateDirectory = "temnplate directory path";

    switch (policyType)
    {
       case "Administrative":
          templateName = "Admin Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Policy":
          templateName = "Policy Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Consignment":
          templateName = "Consignment Xls File"; //How can I swap between the .xls and .xlsx file?
          break;
       case "Quality":
          templateName = "Quality Xls file"; //How can I swap between the .xls and .xlsx file?
          break;
       default:
          templateName = string.Empty;
          break;
    }

    string filePath = Path.Combine(baseDirectory, templateDirectory, templateName);
    byte[] fileData = System.IO.File.ReadAllBytes(filePath);
    string contentType = MimeMapping.GetMimeMapping(filePath);

    return File(fileData, contentType);
}

1 个答案:

答案 0 :(得分:1)

有一个Path方法 - Path.ChangeExtension可以为您更改扩展程序:

  

如果path没有扩展名,并且扩展名不为null,则返回的路径字符串包含附加到路径末尾的扩展名。

如果您使用其中一个扩展程序(例如xlsx)存储文件名,这也可以,那么您需要做的就是:

if (xlsSelected)
    Path.ChangeExtension(filePath, ".xlsx");

显然,您需要传入(或以其他方式确定)xlsSelected

或者,如果您只存储没有扩展名的模板名称,则可以执行以下操作:

if (xlsSelected)
    templateName = templateName + ".xls";
else
    templateName = templateName + ".xlsx";

您可以进一步制作扩展字符串资源和/或配置,以防将来需要再次更改它们。