2013-12-02 7 views
1

Я просмотрел дюжину страниц с вопросом «Как загрузить файл из jQuery», но до сих пор не нашел простого решения.Самый простой способ загрузить файл с существующим путем из jquery?

У меня есть JQuery с AJAX внутри:

$.ajax({ 
    url: "/Home/SaveQBMatter", 
    type: "POST", 
    data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }), 
    dataType: "json", 
    traditional: true, 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
      if (data.status == "Success") { 
       var DownloadableFile = data.message; 

       //HERE I NEED TO DOWNLOAD FILE 

       alert("Success! You will be redirect to the Home Page."); 
       var url = '@Url.Action("Index", "Home")'; 
       window.location.href = url; 
      } else { 
       alert("Error occurs on the Database level!"); 
      } 
    }, 
    error: function() { 
      alert("An error has occured!!!"); 
    } 
}); 

Вот в data.message я получаю назад от действий SaveQBMatter ПОЛНЫЙ путь к файлу

Что мне нужно просто позволить моему пользователю загрузить этот файл, прежде чем перенаправление. Любая помощь, пожалуйста?

Примечание: Я использую ASP.NET MVC, если эта информация необходима

+0

Открыть новую вкладку, используя путь к файлу – Spokey

+0

было бы супер здорово! если вы можете помочь мне с iframe и файлами cookie ... – Bryuk

+0

Что такое data.message? URL или фактическое содержимое файла? – Shreyas

ответ

1

Вы можете сделать что-то вроде этого, после успешной ajax call, do location.href = data.message; который, как вы сказали, data.message - это полный путь к файлу. При этом он должен загрузить файл без перенаправления браузера. Также, когда вы загружаете файл, убедитесь, что у вас есть команда force-download.

Вы можете увидеть больше о принуждать скачать здесь: http://www.symkat.com/force-download-with-http-headers

Затем сделать SetTimeout из позволяет говорить от 1 до 2 секунд, вы можете настроить тайминги, как вам нравится, чтобы загрузка инициализации и перенаправления. Так что ваш код будет выглядеть следующим образом:

$.ajax({ 
    url: "/Home/SaveQBMatter", 
    type: "POST", 
    data: JSON.stringify({ 'Matters': result, 'originalRecords': originalRecords, 'originalHours': originalHours, 'excludedHours': excludedHours, 'totalHours': totalHours }), 
    dataType: "json", 
    traditional: true, 
    contentType: "application/json; charset=utf-8", 
    success: function (data) { 
      if (data.status == "Success") { 
       var DownloadableFile = data.message; 

       location.href = DownloadableFile; 

       setTimeout(function() {  
        alert("Success! You will be redirect to the Home Page."); 
        var url = '@Url.Action("Index", "Home")'; 
        window.location.href = url; 
       }, 1000); 
      } else { 
       alert("Error occurs on the Database level!"); 
      } 
    }, 
    error: function() { 
      alert("An error has occured!!!"); 
    } 
}); 
+0

Этот код открывает окна с url как путь к моему файлу, но загрузка не началась. Адрес не был понят Firefox не знает, как открыть этот адрес, потому что протокол (c) не является связанных с любой программой. – Bryuk

+0

Если вы можете отрегулировать ответ data.message, чтобы вернуть весь URL-адрес, он должен работать правильно. Как http://example.com/my/path/to/the/file.csv – Nemesis02

0

Попробуйте открыть URL в новом окне, если не заблокирован браузер пользователей:

if (data.status == "Success") { 
    window.open(data.message, "_blank") 

Если у Вас возникли проблемы с открытием файла, вместо загрузки , вы можете попробовать отправить заголовок распоряжения контента из ASP, как:

Content-Disposition: attachment; filename="filename.extension" 
+0

Где я должен помещать {Content-Disposition: attachment; filename = "filename.extension"} – Bryuk

+0

В ASP.NET вы должны вызвать метод «AddHeader» объекта «Response»: (HttpContext.) Response.Headers.add («Content-Disposition», «attachment; filename» = \ "filename.extension \" ");' –

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