我正在开发一个以mongodb为后端的web应用程序.我想让用户上传图片到他们的个人资料,就像在个人资料图片链接.我在MVC2中使用了一个aspx页面,我读到GridFs库用于将大型文件类型存储为二进制文件.我到处都在寻找如何做到这一点的线索,但mongodb没有任何C#api或GridFs C#的文档.我困惑不解,真的需要另一套大脑.

有谁知道如何真正实现文件上传控制器,将用户上传的图像存储到mongodb集合中?万分感谢!

我试过这个的变种,但都没有用.

Database db = mongo.getDB("Blog");
GridFile file = new GridFile(db);
file.Create("image.jpg");

var images = db.GetCollection("images");
images.Insert(file.ToDocument());

推荐答案

下面的示例演示如何保存文件并从gridfs读取(使用官方mongodb驱动程序):

 var server = MongoServer.Create("mongodb://localhost:27020");
 var database = server.GetDatabase("tesdb");

 var fileName = "D:\\Untitled.png";
 var newFileName = "D:\\new_Untitled.png";
 using (var fs = new FileStream(fileName, FileMode.Open))
 {
    var gridFsInfo = database.GridFS.Upload(fs, fileName);
    var fileId = gridFsInfo.Id;

    ObjectId oid= new ObjectId(fileId);
    var file = database.GridFS.FindOne(Query.EQ("_id", oid));

    using (var stream = file.OpenRead())
    {
       var bytes = new byte[stream.Length];
       stream.Read(bytes, 0, (int)stream.Length);
       using(var newFs = new FileStream(newFileName, FileMode.Create))
       {
         newFs.Write(bytes, 0, bytes.Length);
       } 
    }
 }

Results:

文件:

File im mongodb

区块集合:

块集合

希望这能帮上忙.

.net相关问答推荐

安装特定主要版本的DotNet SDK最新版本

NETSDK1083:无法识别指定的 RuntimeIdentifierwin10-x64

竖线在 PropertyGroup .csproj 文件中的含义

如果只有一个 : 存在于字符串中,则提取冒号后的内容

在 Rx 中,处理线程安全是否是消费者(IObserver)的责任?

线程安全性的单元测试?

从 switch 块中跳出 foreach 循环

如何在 EF 代码优先中禁用链接表的级联删除?

.NET 4.0 中有内置的二叉搜索树吗?

(C# 7.2)私有保护修饰符的用例是什么?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

使文本框不可编辑

C# 中基于接口编程的运算符重载

属性应该与其类型同名吗?

如何在 RabbitMQ 中设置重试次数?

文件按文件名模式存在

静态方法继承的正确替代方法是什么?

在 .NET 中获取默认打印机的最佳方法是什么

接口属性的 XML 序列化

多个列表与 IEnumerable.Intersect() 的交集