我想从我编写的C#webserver执行png文件的javascript xhr请求。 这是我使用的代码
var imgUrl = "http://localhost:8085/AnImage.png?" + now;
var request = new XMLHttpRequest();
request.open('GET', imgUrl, false);
request.send(); // this is in a try/catch
在服务器端,我发回文件并添加Content-Disposition标头。 我得到以下回复
我确保在Content-Type之后将内容处置附加到标题中(屏幕截图来自Firebug,按字母顺序附加)。
结果是没有触发对话框,我在回复中遗漏了什么?
编辑: 我想用javascript执行所有操作有几个原因。 第一:我不想展示图像,我想把一切都放在幕后。 第二:在请求图像时,我希望仅在特定请求中添加Content-Disposition。此类请求标有“警告”标题,其值为“AttachmentRequest”
request.setRequestHeader("Warning","AttachmentRequest");
答案 0 :(得分:8)
当请求是通过XHR时,我认为Content-Disposition
不会触发任何文件保存对话框。使用XHR表明你将在代码中处理结果。
如果您希望提示用户将图像保存到文件中,我已成功使用此技术:
window.open("http://localhost:8085/AnImage.png?" + now);
它的缺点是它会短暂地闪烁一个空白的打开窗口,直到标题到达,然后新窗口关闭并出现“保存文件”对话框。
使用iframe
可能会阻止窗口闪烁:
var f = document.createElement('iframe');
f.style.position = "absolute";
f.style.left = "-10000px";
f.src = "http://localhost:8085/AnImage.png?" + now;
document.body.appendChild(f);
另外,我想知道Content-Disposition
对img
元素的处理有什么影响(如果有的话):
var img = document.createElement('img');
img.style.position = "absolute";
img.style.left = "-10000px";
img.src = "http://localhost:8085/AnImage.png?" + now;
document.body.appendChild(img);
我没试过,但浏览器可能尊重标题。您需要确保在要支持的所有浏览器上进行测试。