最近由于客户需要上传大文件,所以研究了一下文件上传的问题
net6 上传文件分为两种情况:buffering和streaming(缓存和流)
Buffering:
我们平时采用的通过IFormFile上传文件的方式就是Buffering,此方式会将文件全部缓存起来。这种方式简单,但对内存和硬盘空间造成负担。关于缓存,这里有个误区,我们用stream 操作文件的时候,会将文件全部load到内存中,但文件缓存并不是全部缓存到内存中,因为我们的电脑默认开启了虚拟缓存,所以,当我们的内存空间不足的时候,会将文件缓存到当前user的临时文件夹下,举个例子:当我们的内存只有1G空间情况下,上传一个5G的文件并不会导致系统崩溃,因为文件会被存储到临时文件夹下,此时观察临时文件夹的硬盘使用量迅速增大到5G,当文件全部上传完成,临时文件会被清理。所以,当高并发的情况下,磁盘空间会很快耗尽。
Streaming
Streaming上传的时候,不会在临时文件夹创建临时文件,而是直接将文件以流的方式直接存储到指定文件路径下,举个例子:当我们的内存只有1G空间情况下,上传一个5G的文件,此时观察临时文件夹的硬盘使用量只有很小的增长,文件会在一开始就被创建,不断接收传过来的数据,此时有个现象需要注意,当上传意外终止时,文件会保留下来,但内容不完整,需要自己手动处理一下。
当然,在处理大文件时,还可以考虑采用分片上传的模式,此问题正在研究中。
以上内容参考于:
https://learn.microsoft.com/zh-cn/aspnet/core/mvc/models/file-uploads?view=aspnetcore-6.0
标签:WebAPI,文件,缓存,文件夹,内存,net6,5G,上传 From: https://www.cnblogs.com/xinyublog/p/18284455