You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:18:02