如何处理来自 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 端点 [重复]
如何处理来自 Presenter 的 Datagrid 列的事件?