Из курса: Using MongoDB with ASP.NET MVC Demo: Displaying Rental ImagesUsung ASP.NET MongoDB.Driver и я не могу спасти ContextType
^В случае, если у вас есть Pluralsight На данный момент в процессе мы прикрепили изображения в документ «Аренда», затем мы используем некоторую бритву и действие GetImage для отображения изображения в представлении AttachImage.cshtml. Я считаю, что все это работает, изображение привязывается к документу в базе данных.
В: Когда мы сохраняем изображение в базе данных, почему ContentType не добавляется в коллекцию fs.files (GridFS) в базе данных?
Примечание: Я считаю, что код внутри контроллера, который является виновником в или вокруг:
//------------------------------------------
var options = new MongoGridFSCreateOptions
{
Id = imageId,
ContentType = file.ContentType
};
//------------------------------------------
Доказательство образ был сохранен с использованием GridFS
Доказательство ТипСодержимого не получить сэкономленные
AttachImage.cshtml
@model RealEstate.Rentals.Rental
@{ ViewBag.Title = "AttachImage"; }
<h4>Attach Rental Image</h4>
@using (Html.BeginForm(null, null, FormMethod.Post, new {enctype =
"multipart/form-data" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<div class="form-group">
<label class="control-label col-md-2">Decription</label>
<div class="col-md-10">
@Model.Description
</div>
</div>
<div class="form-group">
@Html.Label("Image", new { @class = "control-label col-md-2" })
<div class="col-md-10">
<input type="file" name="file" id="file" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Attach" class="btn btn-default" />
</div>
</div>
</div>
}
@if (Model.HasImage())
//Show Image
{
<img src="@Url.Action("GetImage", new { id = Model.ImageId })" />
}
AttachImage Страница в браузере
RentalsController.cs
namespace RealEstate.Controllers
{
public class RentalsController : Controller
{
public readonly RealEstateContext Context = new RealEstateContext();
public ActionResult Post()
{
return View();
}
[HttpPost]
public ActionResult Post(PostRental postRental)
{
var rental = new Rental(postRental);
Context.Rentals.Insert(rental);
return RedirectToAction("Index");
}
public ActionResult AttachImage(string id)
{
var rental = GetRental(id);
return View(rental);
}
[HttpPost]
public ActionResult AttachImage(string id, HttpPostedFileBase file)
{
var rental = GetRental(id);
if (rental.HasImage())
{
DeleteImage(rental);
}
StoreImage(file, rental);
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);
}
private Rental GetRental(string id)
{
var rental = Context.Rentals.FindOneById(new ObjectId(id));
return rental;
}
private void DeleteImage(Rental rental)
{
//Access GrdFS & Delete By ID/Pass ImageID converted to ObjectId
Context.Database.GridFS.DeleteById(new ObjectId(rental.ImageId));
rental.ImageId = null;
Context.Rentals.Save(rental);
}
private void StoreImage(HttpPostedFileBase file, Rental rental)
{
var imageId = ObjectId.GenerateNewId();
rental.ImageId = imageId.ToString();
Context.Rentals.Save(rental);
var options = new MongoGridFSCreateOptions
{
Id = imageId,
ContentType = file.ContentType
};
Context.Database.GridFS.Upload(file.InputStream, file.FileName);
}
Я не знаю, что еще не проверить, все не только выглядит прямо из моего ective, но это к тройнику (Насколько я могу сказать) из курсов обучения ..
Итак, это была последняя строка кода в контроллере. Мне не удалось передать третий параметр, который устанавливает MIME ContentType из загруженного файла. См. Правильный ответ от Pluralsight Author ниже, ... Спасибо Wes! –