微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LiteDB db.FileStorage.Upload 流方法从不上传任何内容

如何解决LiteDB db.FileStorage.Upload 流方法从不上传任何内容

使用以下内容文件保存到 LiteDb:

private async Task SaveFile(IFormFile file,string someFileName)
{
    using var stream = new MemoryStream();
    await file.copyToAsync(stream);
    db.FileStorage.Upload(SOMEPATHID,someFileName,stream);

    // here just so i can verify the collection has no file data.
    var entireCollection = db.FileStorage.Find(p => true); 
}

流是在控制器上收到的有效 IFormFile,我可以验证流是有效的并且有内容

这不会引发任何错误并正常执行,但它以存储的文件结束,但没有存储块。 除文件数据外,所有信息均可用。

解决方法

猛击我的头一段时间后,我意识到由于流读取器的初始位置,流实际上无法读取。

在尝试上传之前添加 stream.Position = 0; 可以解决问题。

private async Task SaveFile(IFormFile file,string someFileName)
{
    using var stream = new MemoryStream();
    await file.CopyToAsync(stream);
    stream.Position = 0; //reset stream pointer.
    db.FileStorage.Upload(SOMEPATHID,someFileName,stream);

    //collection now has data !
    var entireCollection = db.FileStorage.Find(p => true);
}

或者甚至更简单,永远不要将整个文件保存在内存中,您只需直接在 file.OpenReadStream() 上使用 db.fileStorage.Upload,如下所示:

private async Task SaveFile(IFormFile file,string someFileName)
{
    db.FileStorage.Upload(SOMEPATHID,file.OpenReadStream());

    //collection still has data !
    var entireCollection = db.FileStorage.Find(p => true);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?