使用流上传文件的最佳方式
本文关键字:最佳 方式 文件 | 更新日期: 2023-09-27 18:28:56
我正在调用REST API,它接受Stream从本地设备上传文件,因此目前我使用以下代码从文件中获取Stream,而不是在上传后关闭该流:
var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);
上述方法的问题是,在整个文件上传到服务器之前,用户没有任何机会删除该文件,因为该文件的流是打开的,解决这个问题的方法是什么?
如果你的典型文件大小合理(我希望你不会将2GB以上的文件上传到REST API),你总是可以将流读取到内存中,然后再将其提供给你的API,就像这样:
using (MemoryStream memoryStream = new MemoryStream())
{
using (FileStream fileStream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite)) {
fileStream.CopyTo(memoryStream);
}
memoryStream.Position = 0; // Reset to origin.
// Now use the MemoryStream as you would a FileStream:
api.Upload(memoryStream);
}
另一种选择是在硬盘上创建文件的临时副本,并将其提供给API,但随后处理清理可能会变得有点麻烦。FileOptions.DeleteOnClose
是你的朋友,很可能足以满足你的目的,但它仍然不能提供防弹保证。