使用.net core 2.1
根据Microsoft documentation,应使用IFormFile处理较小的上载文件,而MultipartReader应用于较大的文件。足够公平。
但是,他们也说
使用IFormFile技术上传的文件在处理之前会先缓冲在Web服务器的内存或磁盘上。在action方法内部,可以将IFormFile内容作为流访问。
因此,如果将大文件发送到磁盘并用流读取,为什么我们不应该始终使用IFormFile?如果较大的文件仍未完全加载到RAM中,我不知道为什么MultipartReader。
谁能解释我在这里想念的东西吗?
答案 0 :(得分:4)
IFormFile
设置使用缓冲方法,消耗了磁盘空间或内存。
磁盘和内存都是资源,如果文件上传的大小或频率过高,可能会承受压力,从而导致磁盘空间不足或内存不足问题 ,这会使您的网站崩溃。
请参阅同一page上的注释。
任何超过64KB的单个缓冲文件将从RAM移到服务器磁盘上的临时文件。文件上传使用的资源(磁盘,RAM)取决于并发文件上传的数量和大小。流式传输与性能无关,它与规模有关。如果您尝试缓冲太多的上载,则站点将在内存或磁盘空间不足时崩溃。
通过MultipartReader
进行流式传输不会将整个文件加载到内存中,也不会占用任何磁盘空间。