2016-11-08 2 views
1

В настоящее время я работаю над веб-приложением, использующим 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

Как этот метод знает, если он предназначен для XLS или XLSX? Кажется, вы не передали параметр для этого, и нет «отправителя», чтобы увидеть, какая кнопка была нажата. Почему бы просто не предоставить XLS в обоих случаях, так как новые версии Excel открывают этот файл. Зачем вам обоим? – Equalsk

ответ

1

Там в Path метод - Path.ChangeExtension который изменит расширение для вас:

Если путь не имеет расширения, и расширение не равно нулю, строка возвращаемого пути содержит расширение, добавленное к концу пути.

Как это будет работать, если вы сохранили имя файла с одним из расширений уже на месте (например, XLSX), то все, что вам было бы нужно сделать было бы:

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

Очевидно вам нужно будет пройти (или иным образом определить) xlsSelected.

В качестве альтернативы, если вы просто хранить имя шаблона без расширения вы можете сделать:

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

Вы можете пойти дальше, делая расширение струнных ресурсов и/или конфигурируемые в случае, если есть необходимость изменить их снова в будущем.

+0

Еще раз спасибо, я сделал то же, что и вы, используя условный оператор '(? :)' и изменил оператор switch на 'templateName = fileSelected.Equals (" xls ")? «AdminXls»: «AdminXlsx»; – Code

Смежные вопросы