问题描述
在做一个文件上传第三方存储后再本地备份一份的功能时出现了一个Bug,上传到本地的文件全部只有0个字节,而三方存储却正常存储了文件。
private readonly LocalFileManager LocalFileManager;
private readonly CloudFileManager CloudFileManager;
public void upload(Stream file){
CloudFileManager.ReadFile(file);
// 此时再读取,读取到的数据0个字节
LocalFileManager.ReadFile(file);
}
经过排查,发现这是因为文件流数据只被读取了一次,第二次读取是从文件末尾开始的,也就是直接读空。
解决方法
先将文件读取一遍缓存在内存中,再重复向内存读取文件。
private readonly LocalFileManager LocalFileManager;
private readonly CloudFileManager CloudFileManager;
public void upload(Stream file){
using (MemoryStream stream = new MemoryStream()){
// 将文件流数据copy到内存中
file.CopyTo(stream);
// 使用Seek方法从头开始读内存中的副本
stream.Seek(0, SeekOrigin.Begin);
CloudFileManager.ReadFile(file);
stream.Seek(0, SeekOrigin.Begin);
// 此时再读取,读取到的正常的数据
LocalFileManager.ReadFile(file);
}
}