当前位置: 首页 > 面试题库 >

没有链接的JavaScript Blob文件名

章茂
2023-03-14
问题内容

强制通过window.location下载时,如何在JavaScript中设置Blob文件的名称?

function newFile(data) {
    var json = JSON.stringify(data);
    var blob = new Blob([json], {type: "octet/stream"});
    var url  = window.URL.createObjectURL(blob);
    window.location.assign(url);
}

运行上面的代码即可立即下载文件,而无需刷新页面,如下所示:

bfefe410-8d9c-4883-86c5-d76c50a24a1d

我想将文件名设置为 my-download.json


问题答案:

我知道的唯一方法是FileSaver.js使用的技巧:

  1. 创建一个隐藏<a>标签。
  2. 将其href属性设置为Blob的URL。
  3. 将[download属性设置为文件名。
  4. 点击<a>标签。

这是一个简化的示例(jsfiddle):

var saveData = (function () {
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    return function (data, fileName) {
        var json = JSON.stringify(data),
            blob = new Blob([json], {type: "octet/stream"}),
            url = window.URL.createObjectURL(blob);
        a.href = url;
        a.download = fileName;
        a.click();
        window.URL.revokeObjectURL(url);
    };
}());

var data = { x: 42, s: "hello, world", d: new Date() },
    fileName = "my-download.json";

saveData(data, fileName);

我写这个例子只是为了说明这个想法,在生产代码中使用FileSaver.js代替。

笔记

  • 较旧的浏览器不支持“下载”属性,因为它是HTML5的一部分。
  • 浏览器认为某些文件格式不安全,下载失败。保存带有txt扩展名的JSON文件对我而言有效。


 类似资料:
  • 如何在typescript中设置blob的文件名?对于IE,我可以轻松设置文件名,但对于Chrome来说,这似乎是不可能的。基本上,我需要类似于此解决方案的东西,但需要typescript 此函数从html UI/angular 2调用:

  • 我需要编译一个C项目,它将使用项目中的外部库和头来进行线性规划。它包含两个部分。cpp文件。主要文件,主要农民,取决于pm。H PM. h具有主农场主调用COIN-OR函数所需的所有包含行。这是pm. h的代码: 我有一个由我的老师提供的makefile,并根据自己的需要进行了修改,但每当我试图通过运行makefile来编译项目时,我都会遇到相同的错误: 在文件包含从main-farmer.cpp

  • 问题内容: 大家好,我需要在linux中执行此操作: 给出:文件名“ foo.txt” 查找:所有符号链接到“ foo.txt”的文件 怎么做?谢谢! 问题答案: 这取决于是否要查找指向特定文件的链接,那么这是唯一的好方法: 另一方面,如果您只是想查找指向恰好名为的 任何 文件的链接,则类似 要么

  • 正如您在本教程中看到的那样,http://www.vogella.com/tutorials/JavaPersistenceAPI/article.html 当您声明像 Person 这样的实体时,您必须将其添加到持久性中.xml喜欢

  • 问题内容: 我们是否有理由在链接属性中包含/ 协议? 最好不做任何处理: 问题答案: 包含“ http:”或“ https:”部分只是一个传统问题,一部分是实际指定协议的问题。如果默认,则使用当前页面的协议。例如,///根据引用页面的URL变为http://www.example.com或https://www.example.com。如果网页保存在本地磁盘上然后从那里打开,则该网页没有协议(只是

  • 我希望将文件名设置为my-download.json。