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

时间:2016-01-04 10:13:07

标签: c# .net wpf

我正在调用REST API,它接受Stream从本地设备上传文件,所以为此我现在使用以下代码从文件中获取Stream,而不是在上传后关闭该流:

var stream = new FileStream(file, FileMode.Open, FileAccess.ReadWrite);

上述方法的问题在于,在整个文件上传到服务器用户之前没有任何机会删除该文件,因为该文件的流是打开的,解决此问题的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

如果您的典型文件大小合适(并且我希望您不会将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是你的朋友,可能已满足你的目的,但它仍然没有提供任何防弹保证。