ASP.NET XMLHTTPREQUEST скачать файл с помощью обработчика - PullRequest
1 голос
/ 09 ноября 2011

Я пытаюсь осуществить загрузку файла с помощью xmlhttprequest ... Но я не получаю диалог с файлом или какой-либо ответ. Я отладил обработчик, нет ошибки.

   function download(id)
    {
    try 
    {
        var xmlHttp=new XMLHttpRequest();
        xmlHttp.open("GET","DownloadFileHandler.ashx?id=" + id,false);       
        xmlHttp.send();
           xmlHttp.onreadystatechange=function()
    {
        //if request has been entertained and response is returned from server
        if(xmlHttp.readyState==4)
       {       
          alert("aq");

        }
    }
}



    catch (ex)
    {
    alert("Browser does not support ajax");
    }

    }
}

мой обработчик

context.Response.AppendHeader("content-disposition", "attachment; filename=" + name);
context.Response.ContentType = type;
context.Response.WriteFile(path);
context.Response.End();    

Ответы [ 2 ]

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

Итак, AJAX использует HTTP-запросы на основе XML.Это другой протокол, чем запрос на загрузку файла.Загрузка файла - это двоичный http-запрос.

Во-первых, хотя объект XmlHttpRequest может анализировать данные в XML, вы также можете получить полные данные, будь то двоичные или нет.Вы можете разбирать его на что угодно.

Во-вторых, это не другой протокол.Протокол HTTP.HTTP передает данные и выполняет согласование содержимого в обоих случаях.

В-третьих, запросы HTTP GET (в обоих случаях один и тот же тип запроса) могут возвращать двоичные или текстовые данные полностью независимо от того, как сгенерирован запрос.,Запрос может быть сгенерирован с помощью тега, или пользователем, нажимающим на ссылку, или XMLHttpRequest, и тип содержимого (двоичный или текстовый) полностью не зависит от того, как был сгенерирован запрос.

Реальная причина, по которой вы можетене загружать файл с помощью XMLHttpRequest, но вместо этого приходится использовать специфичные для браузера расширения, такие как nsIWebBrowserPersist, так как браузеры решили не обращать внимания на заголовок Content-Disposition при чтении данных, возвращаемых из XMLHttpRequest, так же, как при чтенииданные для страницы верхнего уровня (или - вы можете инициировать загрузку, получая данные через невидимый iframe)

Лично я считаю, что это плохой выбор для веб-браузеров, поскольку нет дополнительной безопасности,Единственное неудобство для разработчиков.Невозможно отправить Accept: заголовки или глаголы, кроме GET, отправляя запросы с элементом IFRAME или IMG, поэтому вы не можете контролировать согласование содержимого.Вместо этого вы должны экранировать протокол HTTP в параметры GET, что я нахожу печальным и не-REST-ful.

Для получения дополнительной информации о nsIWebBrowserPersist см. https://developer.mozilla.org/en/Code_snippets/Downloading_Files

0 голосов
/ 22 ноября 2011

Обратите внимание, что в вашем коде есть:

var xmlHttp=new XMLHttpRequest();

Итак, AJAX явно использует http-запросы на основе XML.Это другой протокол, чем запрос на загрузку файла.Загрузка файла - это двоичный http-запрос.

Вроде как говорить на двух разных языках, когда нет переводчика.Не работает ...

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

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