如何让浏览器下载浏览器生成的数据?

时间:2011-03-11 16:01:15

标签: javascript html5

有一个浏览器程序,允许用户下棋 - 移动棋子等,试图让用户直接从浏览器下载结果pgn(Content-Type:PGN)。

它与数据有关:URI?在某个地方有一些例子吗?

仅对现代浏览器感兴趣

2 个答案:

答案 0 :(得分:2)

我不太确定我是否理解你的问题。你的意思是你生成PNG格式的图像,但浏览器不提供下载,而是直接显示图像?

如果是这样,解决方案是通过将适当的MIME类型设置为HTTP标题“内容类型”来指示要下载的文件。

在PHP中,你这样做:

header("Content-Type: application/force-download"); 

header("Content-Type: application/octet-stream");

当浏览器收到此MIME类型时,它不会尝试显示内容本身。

答案 1 :(得分:0)

您可以使用数据URI,但存在一些限制。 Here's an example,根据我的回答to an earlier question。你要注意的第一件事是你无法真正控制文件名,但除此之外它在Firefox和Chrome中运行正常,但是probably not so well in IE(我没试过)。

假设您已经可以将PGN生成为字符串,那么创建数据URI的代码非常简单:

function exportData(data, target) {
    var exportLink = document.createElement('a');
    exportLink.setAttribute('href', 'data:application/x-chess-pgn;base64,' + window.btoa(data));
    exportLink.appendChild(document.createTextNode('sample.pgn'));
    document.getElementById(target).appendChild(exportLink);
}

只需使用您生成的任何内容设置数据,并设置一个元素,以便在创建链接后保留该链接。

将来我们会遇到better solutions这类问题,但目前还没有浏览器支持。