如何使用 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 更新中正常工作。
在我的 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 更新中正常工作。