2013-05-04 104 views
5

我正在使用一個插件從表中生成一個csv文件,該文件正在下載一個「下載」文件名,我如何更改文件名例如作爲dowload.csvJavascript:設置要下載的文件名

var csv = $("#table").table2CSV({delivery:'download'}); 
window.location.href = 'data:text/csv;charset=UTF-8,'+ encodeURIComponent(csv); 

回答

27

我寫了一個工具,你可以用它來保存文件到本地機器上的下載文件夾,使用自定義的文件名,如果客戶端的機器上是可能的。在這篇文章中,你需要chrome,firefox或者IE10,但是這個工具可以退回到一個非命名的下載,如果這是所有可用的,因爲什麼都比沒有好......

供您使用:

和魔碼:

function download(strData, strFileName, strMimeType) { 
    var D = document, 
     a = D.createElement("a"); 
     strMimeType= strMimeType || "application/octet-stream"; 


    if (navigator.msSaveBlob) { // IE10 
     return navigator.msSaveBlob(new Blob([strData], {type: strMimeType}), strFileName); 
    } /* end if(navigator.msSaveBlob) */ 


    if ('download' in a) { //html5 A[download] 
     a.href = "data:" + strMimeType + "," + encodeURIComponent(strData); 
     a.setAttribute("download", strFileName); 
     a.innerHTML = "downloading..."; 
     D.body.appendChild(a); 
     setTimeout(function() { 
      a.click(); 
      D.body.removeChild(a); 
     }, 66); 
     return true; 
    } /* end if('download' in a) */ 


    //do iframe dataURL download (old ch+FF): 
    var f = D.createElement("iframe"); 
    D.body.appendChild(f); 
    f.src = "data:" + strMimeType + "," + encodeURIComponent(strData); 

    setTimeout(function() { 
     D.body.removeChild(f); 
    }, 333); 
    return true; 
} /* end download() */ 

更新:增加了防未來的IE程序

update2:結帳the evolved version on GitHub包含dataURL和Blob支持。

+1

看起來不錯,但這不支持2012年之前的任何瀏覽器。我想這是我們可以用客戶端下載做的最好的。 – styfle 2013-06-18 19:26:47

+0

實際上,dataURL回退在firefox的相當老的副本上工作,並且在舊版本的chromes上有一些可以解決的mime類型問題。去年我在添加IE10和[下載]功能之前使用了多年的功能...... – dandavis 2013-06-18 20:22:47

+1

'BlobBuilder'已被棄用。請修改您的答案,以改爲使用Blob構造函數。 – 2013-12-30 17:53:05

相關問題