为什么我不应该使用IFormFile进行大型上传

时间:2018-12-12 15:18:36

标签: asp.net-core asp.net-core-mvc

使用.net core 2.1

根据Microsoft documentation,应使用IFormFile处理较小的上载文件,而MultipartReader应用于较大的文件。足够公平。

但是,他们也说

  

使用IFormFile技术上传的文件在处理之前会先缓冲在Web服务器的内存或磁盘上。在action方法内部,可以将IFormFile内容作为流访问。

因此,如果将大文件发送到磁盘并用流读取,为什么我们不应该始终使用IFormFile?如果较大的文件仍未完全加载到RAM中,我不知道为什么MultipartReader。

谁能解释我在这里想念的东西吗?

1 个答案:

答案 0 :(得分:4)

IFormFile设置使用缓冲方法,消耗了磁盘空间或内存。

磁盘和内存都是资源,如果文件上传的大小或频率过高,可能会承受压力,从而导致磁盘空间不足内存不足问题 ,这会使您的网站崩溃。

请参阅同一page上的注释。

  

任何超过64KB的单个缓冲文件将从RAM移到服务器磁盘上的临时文件。文件上传使用的资源(磁盘,RAM)取决于并发文件上传的数量和大小。流式传输与性能无关,它与规模有关。如果您尝试缓冲太多的上载,则站点将在内存或磁盘空间不足时崩溃。


通过MultipartReader进行流式传输不会将整个文件加载到内存中,也不会占用任何磁盘空间。