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

本文关键字:文件 下载 方法 | 更新日期: 2023-09-27 18:16:51

我目前正在使用c#和Asp的web应用程序上工作。净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);
}

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

有一个Path方法- Path.ChangeExtension将为您更改扩展名:

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

因为这也将工作,如果你存储的文件名与一个扩展名已经在适当的地方(例如xlsx),那么所有你需要做的是:

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

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

或者,如果你只存储模板名而不带扩展名,你可以这样做:

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

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