例如,如果你点击链接:

数据:应用程序/八进制;base64 SGVsbG8 =

浏览器将提示您下载一个文件,该文件由超链接本身中base64所包含的数据组成。是否有办法在标记中建议一个默认名称?如果不是,是否有JavaScript解决方案?


当前回答

谷歌代码上有一个小的变通脚本,对我有用:

http://code.google.com/p/download-data-uri/

它添加一个包含数据的表单,提交该表单,然后再次删除该表单。很粗糙,但对我来说很管用。需要jQuery。

这个线程出现在谷歌谷歌代码页之前,我认为它可能有帮助,在这里也有链接。

其他回答

您可以向锚元素添加一个下载属性。

示例:

<a download="abcd.cer"
    href="data:application/stream;base64,MIIDhTC......">down</a>
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
var sessionId ='\n';
var token = '\n';
var caseId = CaseIDNumber + '\n';
var url = casewebUrl+'\n';
var uri = sessionId + token + caseId + url;//data in file
var fileName = "file.i4cvf";// any file name with any extension
if (isIE)
    {
            var fileData = ['\ufeff' + uri];
            var blobObject = new Blob(fileData);
            window.navigator.msSaveOrOpenBlob(blobObject, fileName);
    }
    else //chrome
    {
        window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
         window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function (fs) {
            fs.root.getFile(fileName, { create: true }, function (fileEntry) { 
                fileEntry.createWriter(function (fileWriter) {
                    var fileData = ['\ufeff' + uri];
                    var blob = new Blob(fileData);
                    fileWriter.addEventListener("writeend", function () {
                        var fileUrl = fileEntry.toURL();
                        var link = document.createElement('a');
                        link.href = fileUrl;
                        link.download = fileName;
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    }, false);
                    fileWriter.write(blob);
                }, function () { });
            }, function () { });
         }, function () { });
    }

(这个答案已被新技术淘汰,但出于历史兴趣,将保留在这里。)

这听起来有点粗俗,但我以前也遇到过同样的情况。我正在用javascript动态生成一个文本文件,并希望通过使用data-URI进行编码来提供它供下载。

这在轻微的用户干预下是可能的。生成一个链接<a href="data:…">右键单击我并选择“Save Link As…”并保存为“example.txt”</a>. txt”。正如我所说,这是不优雅的,但如果你不需要专业的解决方案,它是可行的。

这可以通过使用flash将名字复制到剪贴板中来减轻痛苦。当然,如果你允许自己使用Flash或Java(现在浏览器的支持越来越少了),你可能会找到另一种方法来做到这一点。

使用download属性:

<a download='FileName' href='your_url'>

下载属性适用于Chrome、Firefox、Edge、Opera、桌面版Safari 10+、iOS Safari 13+,但不适用于IE11。

下面的Javascript代码片段通过使用链接的新“下载”属性并模拟点击在Chrome中工作。

function downloadWithName(uri, name) {
  var link = document.createElement("a");
  link.download = name;
  link.href = uri;
  link.click();
}

下面的例子展示了它的使用:

downloadWithName("data:,Hello%2C%20World!", "helloWorld.txt")