我需要一个帮助。在使用Javascript/Angular.js下载时,我需要重命名文件。实际上,我有一个功能转换HTML表到excel表,并下载它。我在下面解释我的代码。
$scope.generateExcelSheet=function(){
var uri = 'data:application/vnd.ms-excel;base64,'
, template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'
, base64 = function(s) { return window.btoa(unescape(encodeURIComponent(s))) }
, format = function(s, c) { return s.replace(/{(\w+)}/g, function(m, p) { return c[p]; }) }
var table='exportable';
var name='Report';
// console.log('table',table,name);
if (!table.nodeType) table = document.getElementById(table)
var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}
window.location.href = uri + base64(format(template, ctx));
}
在这里,我需要在文件下载之前,它会要求用户重命名文件,然后下载它。请帮帮我。
发布于 2016-09-02 20:34:29
不是将窗口位置更改为您的数据url,而是创建一个<a>
元素(它不需要是DOM的一部分,使用document.createElement('a')
就足够了),将URL放入base64 url的href
属性中,并添加一个具有您所关心的任何文件名的download
属性。然后在创建的锚点上调用click()
。
这可以在任何浏览器上运行,这意味着-大多数现代浏览器,除了IE11 (但在supports the download attribute上运行)和Safari。
https://stackoverflow.com/questions/39292462
复制相似问题