2014-09-23 234 views
4

我創建了一個Web應用程序來清理CSV/TSV數據。該應用程序允許我上傳CSV文件,讀取它,修復數據,然後使用正確的數據下載新的CSV文件。我遇到的一個挑戰是下載超過2500行的文件。瀏覽器與以下錯誤消息崩潰:encodeURI文件下載 - 崩潰瀏覽器

"Aw, Snap! Something went wrong while displaying this webpage..." 

要解決這一點,我已經改變了編程下載多個CSV文件不超過2500線,直到所有的數據被下載。然後我會將下載的CSV文件放到最終文件中。這不是我正在尋找的解決方案。處理超過100,000行的文件時,我需要將所有內容下載到1個文件中,而不是40個。我還需要一個前端解決方案。

以下是下載CSV文件的代碼。我正在創建一個隱藏鏈接,對數據數組的內容進行編碼(每個元素有1000行)併爲隱藏鏈接創建路徑。然後我觸發點擊鏈接開始下載。

var startDownload = function (data){ 
    var hiddenElement = document.createElement('a'); 
    var path = 'data:attachment/tsv,'; 
    for (i=0;i<data.length;i++){ 
     path += encodeURI(data[i]); 
    } 
    hiddenElement.href = path; 
    hiddenElement.target = '_blank'; 
    hiddenElement.download = 'result.tsv'; 
    hiddenElement.click(); 
} 

在我的情況下,上述過程每次工作約2500行。如果我嘗試下載更大的文件,瀏覽器會崩潰。我做錯了什麼,以及如何在不崩潰瀏覽器的情況下下載更大的文件?瀏覽器崩潰的文件有(12,000行乘48列)

p.s.我在谷歌瀏覽器中完成了所有這些工作,可以上傳文件。所以解決方案應該在Chrome中運行。

+0

Hi Xited,你找到任何解決方案。 Bcz也面臨同樣的問題。 – 2015-06-10 05:57:06

+0

你是否試圖完全在瀏覽器中進行CSV清理?如果沒有,你怎麼不把數據發佈到服務器上? – eddiewould 2015-06-10 09:24:57

+0

可能的話,看看http://www.gieson.com/Library/projects/utilities/opensave,如果你試圖完全在瀏覽器中完成 – eddiewould 2015-06-10 09:30:58

回答

1

我以前遇到過這個問題,我發現的解決方案是使用Blob s來下載CSV。從本質上講,你把CSV數據到一個BLOB,然後使用URL API創建一個URL的鏈接使用,如:

var blob = new Blob([data], { type: 'text/csv' }); 
var hiddenElement = document.createElement('a'); 
hiddenElement.href = window.URL.createObjectURL(blob); 

斑點aren't supported in IE9,但如果你只需要瀏覽器的支持,你應該罰款。

0

我也面臨同樣的問題。我用這個代碼,它會正常工作。你也可以試試這個。

if (window.navigator.msSaveBlob) { 
    window.navigator.msSaveBlob(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')]),'data.csv'); 
} else { 
var link = document.createElement('a'); 
link.download = 'data.csv'; 
// If u use chrome u can use webkitURL in place of URL 
link.href = window.URL.createObjectURL(new Blob([base64toBlob($.base64.encode(excelFile), 'text/csv')])); 
link.click(); 
}