如何处理来自 XMLHttpRequest 的八位字节流

Posted

技术标签:

【中文标题】如何处理来自 XMLHttpRequest 的八位字节流【英文标题】:How to handle octet-stream coming from XMLHttpRequest 【发布时间】:2012-04-04 21:41:46 【问题描述】:

我想通过 AJAX 调用从服务器下载文件。 使用iframe 可以轻松完成,如下所示:

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

但我有更复杂的问题。 在某些情况下,后端会返回内容类型为“text/html”的响应,而不是 application/octet-stream

我计划使用XMLHttpRequest 调用支持下载文件。 通过使用XMLHttpRequest,如何让浏览器弹出保存文件对话框来处理应用程序/八位字节流?

// 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】:

我能想到两个选择。

    先发送 HEAD 请求,根据内容决定动作 输入。 发出 GET 请求,知道会发生什么。 创建数据 包含数据的 URI (RFC 2387) 并使用 window.open 打开它。 浏览器会为无法呈现的内容打开一个对话框。

【讨论】:

以上是关于如何处理来自 XMLHttpRequest 的八位字节流的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 XMLHttpRequest 下载文件中的 javascript? [复制]

如何处理不安全的 XMLHttpRequest 端点 [重复]

Swift Alamofire 如何处理来自循环的所有请求

如何处理来自 Presenter 的 Datagrid 列的事件?

Android/Parse-如何处理来自 ParseQuery 的多个回调

Core Data + iCloud 如何处理来自云端的数据更新