загрузка файла с помощью JavaScript - PullRequest
53 голосов
/ 14 декабря 2008

Допустим, у меня есть ссылки для скачивания файлов на моем сайте.

При щелчке по этим ссылкам отправляется запрос AJAX на сервер, который возвращает URL-адрес с расположением файла.

Что я хочу сделать, так это указать браузеру загрузить файл при получении ответа. Есть ли портативный способ сделать это?

Ответы [ 12 ]

1 голос
/ 06 марта 2013

Почему вы делаете вещи на стороне сервера, когда все, что вам нужно, это перенаправить браузер на другой window.location.href?

Вот код, который анализирует? File = QueryString ( взято из этого вопроса ) и перенаправляет пользователя на этот адрес за 1 секунду (у меня работает даже в браузерах Android):

<script type="text/javascript">
    var urlParams;
    (window.onpopstate = function () {
        var match,
        pl = /\+/g,  // Regex for replacing addition symbol with a space
        search = /([^&=]+)=?([^&]*)/g,
        decode = function (s) { return decodeURIComponent(s.replace(pl, " ")); },
        query = window.location.search.substring(1);

        urlParams = {};
        while (match = search.exec(query))
            urlParams[decode(match[1])] = decode(match[2]);
    })();

    (window.onload = function() {
        var path = urlParams["file"];
        setTimeout(function() { document.location.href = path; }, 1000);
    });
</script>

Если в вашем проекте есть jQuery, обязательно удалите эти обработчики window.onpopstate и window.onload и сделайте все в $ (document) .ready (function () {});

1 голос
/ 14 декабря 2008

Я бы предложил window.open(), чтобы открыть всплывающее окно. Если это загрузка, окна не будет, и вы получите свой файл. Если есть 404 или что-то еще, пользователь увидит его в новом окне (следовательно, его работа не будет беспокоить, но он все равно получит сообщение об ошибке).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...