所以我有一个用例,客户端上传一个小的TSV文件,该文件在服务器上打开并解析,结果写入服务器上的新文件。
由于TSV文件很小(小于1 MB),我想知道是否有必要在解析之前将文件上传到服务器(将其写入磁盘)。相反,当用户点击“上传文件”时,是否可以捕获文件内容?然后我可以将文件内容存储在一个数组中,每个项目代表文件中的一行。
思想?
答案 0 :(得分:1)
您不需要将文件流式传输到磁盘,但请注意,您应该设置简明扼要的限制,以便某人无法上传5GB文件并使服务因内存耗尽而崩溃。您只需要知道,当您在内存中完全处理某些内容时,您的内存量可能会减少(可能更少)。也可以对其进行流解析,这样在解析之前就不需要将其保存到磁盘。在你的情况下,将它上传到内存中听起来最简单,并确保你对上传文件大小设置了一个限制(可能是5mb的限制)。
答案 1 :(得分: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这样的内容要容易得多。