MongoDb.GridFS.FindOneById возвращает ноль
Я загружаю изображение на сервер со следующим кодом:
public ActionResult AttachImage(HttpPostedFileBase file)
{
var options = new MongoGridFSCreateOptions
{
Id = ObjectId.GenerateNewId().ToString(),
ContentType = file.ContentType
};
Context.Database.GridFS.Upload(file.InputStream, file.FileName, options);
return RedirectToAction("Index");
}
и пытается получить файл как:
public ActionResult GetImage(string id)
{
var image = Context.Database.GridFS.FindOneById(new ObjectId(id));
if(image == null)
{
return HttpNotFound();
}
return File(image.OpenRead(), image.ContentType);
}
После загрузки я вижу файл в базе данных, но при попытке загрузить его как
Context.Database.GridFS.FindOneById(new ObjectId(id));
Я всегда получаю ноль. Не могли бы вы подсказать, что я делаю не так?
public class DbContext
{
public MongoDatabase Database;
public DbContext()
{
var client = new MongoClient(Properties.Settings.Default.ConnectionString);
var server = client.GetServer();
Database = server.GetDatabase(Properties.Settings.Default.DatabaseName);
}
}
mongocsharpdriver 2.5.0 mongo server 3.6
1 ответ
Решение
Оказалось, я неправильно искал файл по идентификатору.
Вместо
var image = Context.Database.GridFS.FindOneById(new ObjectId(id));
Я должен использовать
var image = Context.Database.GridFS.FindOneById(id);
Я использовал код из примеров для предыдущей версии драйвера, но в 2.5 нам не нужно использовать
new ObjectId(id)