如何使用 Webix 和 Javascript 下载具有特定名称的文本文件

How to download a text file with specific name using Webix and Javascript

在我的 Webix 应用程序中,我试图下载一个具有特定文件名的文件,该文件名是从用户处获取的或以编程方式构造的。下载功能运行良好,但文件总是以名称 'download' 下载。

浏览器是Chrome。我需要使它在 Chrome 和 Firefox 上都能工作。 以下是我的下载工作代码:

Webix 部分:

mytoolbar =
  { id:'toolbarID',
    view: 'toolbar',
    height: rowHeight,
    type: 'clean',
    cols: [
      {view:"button", id:"downld", label:"Download", width:100, tooltip: "Download data", on: {onItemClick:function(){downloadData()}} },
      ]
   }

回调函数:

function downloadData() {
    var $$ref = $$('mytext');
    var value = $$ref.getValue();
    var msg = "This is the " + value + "of the port";
    // assume that the filename will be also be constructed like msg as 
    // as above.

    document.location = 'data:Application/octet-stream,' + encodeURIComponent(msg)

}

我试过下面的东西都是徒劳的:

我需要将其下载为 .txt 文件的 Webix 下载功能无法使用:

var $$ref = $$('mytext');
var value = $$ref.getValue();
var msg = "This is the " + value + "of the port";
var blob = new Blob([msg.toString()], { type: "application/pdf" });
webix.html.download(blob, "myfile.pdf");

下面一个是可行的,但是我无法传递文本和文件名的变量。它仅适用于硬编码文本和文件名。提供变量的任何提示都会有所帮助。 :

function downloadData() {
$('<a href="data:text/plain,Test" download="test.txt">')[0].click()
}

以下尝试部分奏效。它总是下载带有“235d67c8-892f-465d-95c4-17bc3cc51849”等长文本的文件。假设变量 msg 与上面相同:

function downloadData() {
 var msg = "Contstucted as above by string concatenation";
 var filename = file + ".txt"; //assume file is a var
 var blob = new File([msg], filename, {"type": "application/octet-stream"});

  var a = document.createElement("a");
  a.href = URL.createObjectURL(blob);

  window.location.href=a;

}

如果我如下将 Webix 按钮更改为锚点 ( ) 并传递 download= "filename",那也不起作用,但是在这种情况下,无法动态传递文件名变量。

{ template:"<a id = \"link\", onclick=\"downloadData()\" ,  href = \"#\" >Download</a>" },

当前端是 Webix 时,有没有办法实现这个?仅从 Whosebug 上的各种链接尝试了这些示例,下面给出了一些示例:

Is there any way to specify a suggested filename when using data: URI?
How to set a downloading file name using window.open in javascript

你的代码确实对我有效(或者当然结果文件不是 PDF 文件,但它包含指定的名称和内容)

http://webix.com/snippet/400b9001

不过,此类代码对于 Mac 上的 Safari 会失败。 Safari 不支持为要下载的文件设置自定义名称。好消息,这个功能已经添加到最新的开发中。 Safari 的预览,因此功能将在下一个 Mac OS 更新中正常工作。