2016-01-05 64 views
0

所以我有一個用例,其中客戶端上傳一個小的TSV文件,在服務器上打開並解析文件,並將結果寫入服務器上的新文件。從客戶端到服務器流文本文件?

由於TSV文件很小(1 MB以下),我想知道是否有必要在解析文件之前將文件上傳到服務器(寫入磁盤)。相反,當用戶點擊「上傳文件」時可以捕獲文件內容嗎?然後,我可以將文件內容存儲在數組中,每個項目代表文件中的一行。

想法?

回答

1

您不需要將文件流式傳輸到磁盤,但請注意,您應該設置清晰和簡潔的限制,以避免人們上傳5GB文件並使內存耗盡導致服務崩潰。你只需要知道,當你在內存中完全處理某些東西時,你只限於可用的內存量(可能更少)。也可以對它進行流解析,以便在解析它之前不需要將其保存到磁盤。在你的情況下,聽起來最簡單的方法就是將其上傳到內存中,並確保你在上傳文件大小上設置了限制(可能有5mb的限制)。

1

你問這個選項是否可行或是否是個好主意?

關於可行性,完全有可能使用FileReader API解析內容,然後簡單地將Meteor.call解析爲附加到磁盤上文件的任何方法。代碼如下:

function onSubmit(event, template) { 
    var file = template.$('.your-file-input-elemt').files[0]; 
    var filereader = new FileReader(); 
    filereader.onload = function(fileevent) { 
     Meteor.call('processTSV', filereader.readAsText(file)); 
    }; 
} 

如果你在談論它是否是一個好主意,那麼它歸結爲瀏覽器支持。沒有FileReader API的用戶沒有得到應用程序的支持,你還好嗎?如果是這樣,處理比使用CollectionFS這樣的上傳更容易處理。

相關問題