使用流上传文件的最佳方式

本文关键字:最佳 方式 文件 | 更新日期: 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是你的朋友,很可能足以满足你的目的,但它仍然不能提供防弹保证。