通过.NET Core Razor Pages上传图片到Firebase后文件为0KB无报错如何解决
问题产生原因
- 流指针位置异常:将上传的文件写入本地FileStream后,流的
Position属性指向流的末尾,后续Firebase上传方法从该位置读取内容时无法读取到任何字节,导致上传文件大小为0KB。 - 异步操作未等待:代码调用Firebase的
PutAsync方法时未添加await关键字,方法执行结束时上传操作可能还未完成,容易出现异常或资源泄漏。 - 流资源未托管:FileStream未使用
using包裹,无法自动释放资源,可能出现文件被占用等异常。
修复方案
方案1:保留本地文件缓存的修正代码
public async Task OnPostAsync(IFormFile photo) { var path = Path.Combine(_env.ContentRootPath, "Uploads", photo.FileName); // 使用using声明自动释放流资源 using var stream = new FileStream(path, FileMode.Create); await photo.CopyToAsync(stream); FileName = photo.FileName; // 重置流指针到起始位置 stream.Position = 0; // 等待上传操作完成 await new FirebaseStorage("[project_name].appspot.com") .Child(FileName) .PutAsync(stream); }
方案2:无需本地缓存的简化实现
如果业务不需要在本地服务器留存上传的文件,可以直接读取IFormFile的流上传,减少IO开销:
public async Task OnPostAsync(IFormFile photo) { FileName = photo.FileName; using var uploadStream = photo.OpenReadStream(); await new FirebaseStorage("[project_name].appspot.com") .Child(FileName) .PutAsync(uploadStream); }
内容的提问来源于stack exchange,提问作者Nabil Akhlaque
相关产品推荐
相关产品推荐

