Как обрабатывать поток октетов, поступающий из XMLHttpRequest - PullRequest
2 голосов
/ 20 марта 2012

Я хочу скачивать файлы с сервера с помощью вызовов AJAX. Это можно легко сделать с помощью iframe следующим образом:

var ifrm = document.getElementById("fileframe"); 
ifrm.src = "DownloadFile?fileid="+fileid;

Но у меня есть более сложная проблема. В некоторых случаях вместо application / octet-stream ответ с типом содержимого 'text / html' возвращается бэкендом.

Я планирую использовать XMLHttpRequest звонки для резервного копирования для загрузки файлов. Используя XMLHttpRequest, как я могу заставить браузер открыть диалоговое окно сохранения файла для обработки application / octet-stream?

// connect function handles the XMLHttpRequest communication with the backend
var connection = connect('DownloadFile','fileid='+fileid); 
connection.onreadystatechange = function(){
    if(connection.readyState == 4) { 
        var contentType = connection.getResponseHeader('Content-Type');
        if(contentType == 'application/octet-stream'){
           // here I want to make the browser popup a save file dialog
           // for the incoming octet stream
           // maybe I can direct stream to an iframe, but how??

        }else{
           alert(connection.responseText);
        }
    }
    if((connection.readyState == 2)||(connection.readyState == 3)){
    }
}

1 Ответ

0 голосов
/ 17 мая 2012

Я могу придумать два варианта.

  1. Сначала отправьте запрос HEAD и определите действие на основе типа контента.
    Отправьте запрос GET, зная, чего ожидать.
  2. Создайте URI данных (RFC 2387) с данными и откройте его с помощью window.open.
    Браузер откроет диалоговое окно для содержимого, которое не может быть отображено.
...