Подскажите файл для сохранения -MVC - PullRequest
1 голос
/ 29 марта 2011

Я хочу предложить пользователю сохранить диалоговое окно сохранения. Тип файла: .wav.Действие показано ниже

  public ActionResult MergeSelectedRecords(string mergeFileName, List<String> selectedRecords)
    {
       string urlFilePath=GetFilePath(); //get virtual path of file.       

       ControllerContext.HttpContext.Response.AddHeader("content-disposition",        "attachment; filename=" + "cccc");    

       string filePath = ControllerContext.HttpContext.Server.MapPath(urlFilePath);
       return File(filePath, ".wav");
      }

Путь к файлу сэмпла: 'http: / localhost: 2694 / DATA / MERGE / OUT / 1 / cccc'

Но он показывает ошибку, показанную ниже

'http:/localhost:2694/DATA/MERGE/OUT/1/cccc' is not a valid virtual path. 

Является ли это правильным способом a, чтобы предложить пользователю диалог сохранения файла?

РЕДАКТИРОВАТЬ

Иногда файл не доступендля пользователя.Поэтому я хочу показывать предупреждение только в том случае, если urlFilePath = "".

ЕСЛИ нет доступного пути к файлу. Как я могу вернуть пустой результат. И сделать предупреждение пользователю ... То, что я хочу, приведено ниже

  public ActionResult MergeSelectedRecords(string mergeFileName, List<String> selectedRecords)
    {
       string urlFilePath=GetFilePath(); //get virtual path of file.       
     if(urlFilePath!="")
      {
       ControllerContext.HttpContext.Response.AddHeader("content-disposition",        "attachment; filename=" + "cccc");    

       string filePath = ControllerContext.HttpContext.Server.MapPath(urlFilePath);
       return File(filePath, ".wav");
      }
     else
      {
           //what i return here? If it possible i only want to display an alert .But the page user viewing cannot refreshed
      } 
      }

1 Ответ

1 голос
/ 29 марта 2011

Аргумент urlFilePath, который вы передаете методу MapPath, должен быть относительным URL в том же сайте, начиная с ~/. Пример:

public ActionResult MergeSelectedRecords(string mergeFileName, List<String> selectedRecords)
{
    string urlFilePath = "~/Files/ccc.wav";
    string filePath = Server.MapPath(urlFilePath);
    return File(filePath, ".wav", "ccc");
}

Если URL-адрес не является частью вашего сайта, вам необходимо сначала загрузить файл. Пример:

public ActionResult MergeSelectedRecords(string mergeFileName, List<String> selectedRecords)
{
    using (var client = new WebClient())
    {
        byte[] file = client.DownloadData("http://foo.com/ccc.wav");
        return File(file, ".wav", "ccc");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...