欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁(yè) > 知識(shí)庫(kù) > ASP.NET MVC4使用MongoDB制作相冊(cè)管理

ASP.NET MVC4使用MongoDB制作相冊(cè)管理

熱門標(biāo)簽:電話機(jī)器人鑰匙扣 漯河外呼調(diào)研線路 廣西房產(chǎn)智能外呼系統(tǒng)推薦 400電話唐山辦理 地圖標(biāo)注位置怎么弄圖 電銷專用外呼線路 威力最大的電銷機(jī)器人 電銷外呼系統(tǒng)是違法的嗎 旅游地圖標(biāo)注線路

ASP.NET MVC4使用MongoDB制作相冊(cè)管理實(shí)例分享

TIPS:1.Image轉(zhuǎn)成Base64保存到mongodb字段
         2.數(shù)據(jù)模型是嵌套的關(guān)聯(lián) 

首先定義Model層: 

 public class Photo : IEquatablePhoto>
 {
  [Required]
  public string PhotoName { get; set; }


  [Required]
  public string PhotoDescription { get; set; }


  public string ServerPath { get; set; }


  public Photo() { }


  public Photo(string name, string desc)
  {
   PhotoName = name;
   PhotoDescription = desc;
  }


  public bool Equals(Photo other)
  {
   return string.Equals(PhotoName, other.PhotoName);
  }
 }
 
 
public interface IAlbumIterable
 {
  bool HasNext();
  Photo Current();
  Photo Next();
 } 
 
 
 public interface IPhotosAggregable
 {
  IAlbumIterable GetIterator();
 }


 public class AlbumIterator : IAlbumIterable
 {
  private Album collection;
  private int count;


  public AlbumIterator(Album album)
  {
   collection = album;
  }


  public Photo Current()
  {
   if (count  collection.Count)
    return collection[count++];
   else
    throw new IndexOutOfRangeException();
  }


  public bool HasNext()
  {
   if (count  collection.Count - 1)
    return true;
   else
    return false;
  }


  public Photo Next()
  {
   if (HasNext())
    return collection[++count];
   else
    throw new IndexOutOfRangeException();
  }
 } 
 public class Album : IPhotosAggregable
 {
  [BsonId]
  public ObjectId Id { get; set; }


  [Required]
  public string Name { get; set; }


  [Required]
  public string Description { get; set; }


  public string Owner { get; set; }
  public Photo TitlePhoto { get; set; }


  [BsonDateTimeOptions(Kind = DateTimeKind.Local,Representation =BsonType.DateTime)]
  public DateTime CreationTime { get; set; }
  public IListPhoto> Pictures { get; set; }


  public Album() { Pictures = new ListPhoto>(); TitlePhoto = new Photo(); }
  public Album(string name, string owner, Photo pic)
  {
   Name = name;
   Owner = owner;
   TitlePhoto = pic;
   Pictures = new ListPhoto>();
   TitlePhoto = new Photo();
  }


  public bool InsertPicture(Photo pic)
  {
   if (!Pictures.Contains(pic))
   {
    Pictures.Add(pic);
    return true;
   }
   else
    throw new ArgumentException();
  }


  public bool InsertPictures(ListPhoto> photos)
  {
   foreach(var photo in photos)
   {
    if (!Pictures.Contains(photo))
    {
     Pictures.Add(photo);
    }
    else
     throw new ArgumentException();
   }
   return true;
  }


  public bool RemovePicture(Photo pic)
  {
    Pictures.Remove(pic);
    return true;
  }


  public int Count
  {
   get { return Pictures.Count; }
  }


  public Photo this[int index]
  {
   get { return Pictures[index]; }
   set { Pictures[index] = value; }
  }


  public IAlbumIterable GetIterator()
  {
   return new AlbumIterator(this);
  }
 }

 Services層的MongoAlbumPerformer.cs和ServerPathFinder.cs代碼如下: 

 public class MongoAlbumPerformer
 {
  protected static IMongoClient client;
  protected static IMongoDatabase database;
  private static IMongoCollectionAlbum> collection;
  private string collectionName;

  public MongoAlbumPerformer(string databaseName, string collectionName)
  {
   
   client = new MongoClient(ConfigurationManager.ConnectionStrings["mongoDB"].ConnectionString);
   database = client.GetDatabase(databaseName);
   this.collectionName = collectionName;
   collection = database.GetCollectionAlbum>(collectionName, new MongoCollectionSettings { AssignIdOnInsert = true });
  }

  public void SetCollection(string collectionName)
  {
   this.collectionName = collectionName;
   collection = database.GetCollectionAlbum>(collectionName);
  }

  public void CreateAlbum(Album album)
  {
   var document = new Album
   {
    Name = album.Name,
    Owner = HttpContext.Current.User.Identity.Name,
    Description = album.Description,
    CreationTime = DateTime.Now,
    TitlePhoto = album.TitlePhoto,
    Pictures = album.Pictures
   };

   collection.InsertOne(document);
  }

  public ListAlbum> GetAlbumsByUserName(string username)
  {
   var projection = BuildersAlbum>.Projection
    .Include(a => a.Name)
    .Include(a => a.Description)
    .Include(a => a.TitlePhoto)
    .Include(a=>a.CreationTime);

   var result = collection
    .Find(a => a.Owner == HttpContext.Current.User.Identity.Name)
    .ProjectAlbum>(projection).ToList();

   return result;
  }

  public Album GetPicturesByAlbumName(string albumName)
  {
   var projection = BuildersAlbum>.Projection
    .Include(a => a.Pictures);

   var result = collection
    .Find(a => a.Owner == HttpContext.Current.User.Identity.Name  a.Name == albumName)
    .ProjectAlbum>(projection).FirstOrDefault();

   return result;
  }

  public void UpdateAlbumAddPhoto(string albumName, Photo photo)
  {
   var builder = BuildersAlbum>.Filter;
   var filter = builder.Eq(f => f.Name, albumName)  builder.Eq(f => f.Owner, HttpContext.Current.User.Identity.Name);
   var result = collection.Find(filter).FirstOrDefault();

   if (result == null)
    throw new ArgumentException("No album of supplied name: {0}", albumName);
   else
   {
      var picture = new Photo
      {
       PhotoName = photo.PhotoName,
       PhotoDescription = photo.PhotoDescription,
       ServerPath = photo.ServerPath,
      };

      var update = BuildersAlbum>.Update.Push(a => a.Pictures, picture);
      collection.UpdateOne(filter, update, new UpdateOptions { IsUpsert=true });
   }
  }

  public void DeletePhotoFromAlbum(string albumName, string photoName)
  {
   var builder = BuildersAlbum>.Filter;
   var filter = builder.Eq(f => f.Name, albumName)  builder.Eq(f => f.Owner, HttpContext.Current.User.Identity.Name);
   var result = collection.Find(filter).SingleOrDefault();

   if (result == null)
    throw new ArgumentException("No album of supplied name: {0}", albumName);
   else
   {
    var update = BuildersAlbum>.Update
     .PullFilter(a => a.Pictures, BuildersPhoto>.Filter.Eq(p => p.PhotoName, photoName));
    long count = collection.UpdateOne(filter, update).MatchedCount;
   }
  }
 }public class ServerPathFinder
 {
  public string GetBase64ImageString(HttpPostedFileBase file)
  {
   string mime = Regex.Match(file.ContentType, @"(?=image/)\w+").Value;
   byte[] bytes = new byte[file.ContentLength];
   file.InputStream.Read(bytes, 0, file.ContentLength);
   return string.Format("data:image/{0};base64,{1}",mime, Convert.ToBase64String(bytes));
  }
 }

AlbumController.cs代碼如下: 

 public class AlbumController : Controller
 {
  MongoAlbumPerformer mongod = new MongoAlbumPerformer("test","albums");

  [HttpPost]
  public ActionResult AlbumPreview(Photo model, HttpPostedFileBase file, string albumName, string delete, string phot)
  {
   if (delete == "false")
   {
    if (file != null)
    {
     if (!file.ContentType.StartsWith("image"))
     {
      ModelState.AddModelError("file", "選擇正確的格式照片!");
     }
     else
     {
      ServerPathFinder finder = new ServerPathFinder();
      model.ServerPath = finder.GetBase64ImageString(file);
     }

     if (ModelState.IsValid)
     {
      mongod.UpdateAlbumAddPhoto(albumName, model);
      ModelState.Clear();
     }
    }
   }
   else
   {
    mongod.DeletePhotoFromAlbum(albumName, phot);
    foreach(var error in ModelState.Values)
    {
     error.Errors.Clear();
    }
   }
   ViewBag.AlbumTitle = albumName;
   ViewBag.PhotoList = mongod.GetPicturesByAlbumName(albumName).Pictures;

   return View();
  }

  public ActionResult AlbumPreview(string Name)
  {
   var album = mongod.GetPicturesByAlbumName(Name);
   ViewBag.AlbumTitle = Name;
   ViewBag.PhotoList = album.Pictures;

   return View();
  }

  [HttpPost]
  public ActionResult Create(Album model, HttpPostedFileBase file)
  {
   if (!file.ContentType.StartsWith("image"))
   {
    ModelState.AddModelError("file", "選擇正確的格式照片!");
   }
   else
   {
    ServerPathFinder finder = new ServerPathFinder();
    model.TitlePhoto.ServerPath = finder.GetBase64ImageString(file);    
   }

   if (ModelState.IsValid)
   {
    model.Owner = HttpContext.User.Identity.Name;
    mongod.CreateAlbum(model);
   }
   var albums = mongod.GetAlbumsByUserName(HttpContext.User.Identity.Name);
   ViewBag.Albums = albums;

   return View();
  }

  public ActionResult Create()
  {
   var albums = mongod.GetAlbumsByUserName(HttpContext.User.Identity.Name);
   ViewBag.Albums = albums;
   return View();
  }
 } 

部分view視圖:
 Create.cshtml 

@{
 ViewBag.Title = "Create";
}

h2>我的相冊(cè)/h2>

@Html.Partial("_MyAlbums", (ListAlbum>)ViewBag.Albums)

@using (Html.BeginForm("Create", "Album", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{
 @Html.AntiForgeryToken()
 
 div class="form-horizontal">
  h4>創(chuàng)建新相冊(cè): /h4>
  hr />
  @Html.ValidationSummary(true, "", new { @class = "text-danger" })
  div class="form-group">
   @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
   div class="col-md-10">
    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
   div class="col-md-10">
    @Html.EditorFor(model => model.Description, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" })
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.TitlePhoto, htmlAttributes: new { @class = "control-label col-md-2" })
   div class="col-md-10">
    input type="file" name="file" id="file" style="width: 100%;" data-val="true" data-val-required="要求標(biāo)題圖片."/>
    @Html.ValidationMessage("file",new { @class = "text-danger" })
   /div>
  /div>
  
  div class="form-group">
   div class="col-md-offset-2 col-md-10">
    input type="submit" value="Create" class="btn btn-default" />
   /div>
  /div>
 /div>
}

@section scripts{
 @Scripts.Render("~/bundles/jqueryval")

 script type="text/javascript">
  $('img').click(function (data) {

  });

 /script>
}AlbumPreview.cshtml
 @{
 ViewBag.Title = "AlbumPreview";
}

@using (Html.BeginForm("AlbumPreview", "Album", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
 @Html.AntiForgeryToken()

 {Html.RenderPartial("_Preview", (ListPhoto>)ViewBag.PhotoList);}

 div class="form-horizontal">
  br />
  h4>添加新的照片:/h4>
  hr />
  @Html.ValidationSummary(true, "", new { @class = "text-danger" })

  div class="form-group">
   @Html.LabelFor(model => model.PhotoName, htmlAttributes: new { @class = "control-label col-md-2" })
   div class="col-md-10">
    @Html.EditorFor(model => model.PhotoName, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.PhotoName, "", new { @class = "text-danger" })
   /div>
  /div>

  div class="form-group">
   @Html.LabelFor(model => model.PhotoDescription, htmlAttributes: new { @class = "control-label col-md-2" })
   div class="col-md-10">
    @Html.EditorFor(model => model.PhotoDescription, new { htmlAttributes = new { @class = "form-control" } })
    @Html.ValidationMessageFor(model => model.PhotoDescription, "", new { @class = "text-danger" })
   /div>
  /div>

  div class="form-group">
   label class="control-label col-md-2">選擇照片:/label>
   div class="col-md-10">
    input type="file" name="file" id="file" style="width: 100%;" data-val="true" data-val-required="請(qǐng)選擇圖像" />
    @Html.ValidationMessage("file", new { @class = "text-danger" })
   /div>
  /div>

  div class="form-group">
   div class="col-md-offset-2 col-md-10">
    input type="submit" value="Create" class="btn btn-default" />
   /div>
  /div>
 /div>
 input type="hidden" name="albumName" id="albumName" value="@ViewBag.AlbumTitle" />
 input type="hidden" name="delete" id="delete" value="false" />
 input type="hidden" name="phot" id="phot" value="sraka" />
}

@section scripts{
 @Scripts.Render("~/bundles/jqueryval")

 script type="text/javascript">
  $(document).ready(function () {
   var elements = document.getElementsByClassName("btn btn-xs btn-warning cancel");
   for (var i = 0, len = elements.length; i  len; i++) {
    elements[i].addEventListener("click", function () {
     $('#delete').val(true);
     var name = $(this).attr("id");
     $('#phot').val(name);
     $('#' + name).click();
    });
   }
  })
 /script>
}_Preview.cshtml
 @{
 ViewBag.Title = "_Preview";
}

h2>Album span style="color:royalblue;font-style:italic">@ViewBag.AlbumTitle/span>/h2>

div class="row">
@foreach (var photo in Model)
{
 div class="col-md-3">
  input type="submit" id="@photo.PhotoName" value="刪除" class="btn btn-xs btn-warning cancel" style="text-align:center;float:right" />
  img src="@photo.ServerPath" class="img-responsive img-thumbnail col-md-3" style="width:100%;height:180px" />
  label style="text-align:center;width:100%">@Html.DisplayNameFor(phot=>phot.PhotoName): @photo.PhotoName/label>
  label style="text-align:center;width:100%;font-weight:100">@photo.PhotoDescription/label>
 /div>
}
/div>

運(yùn)行項(xiàng)目結(jié)果如圖:

首頁(yè)創(chuàng)建相冊(cè):


《車》相冊(cè)下的圖片示例,可以增加圖片,刪除圖片


《QQ》相冊(cè)下的圖片示例


mongodb數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)圖:


以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • .NET連接MongoDB數(shù)據(jù)庫(kù)實(shí)例教程
  • MongoDB.NET 2.2.4驅(qū)動(dòng)版本對(duì)Mongodb3.3數(shù)據(jù)庫(kù)中GridFS增刪改查
  • 在.Net中使用MongoDB的方法教程

標(biāo)簽:湖北 無(wú)錫 湘西 焦作 銅陵 綏化 欽州 試駕邀約

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ASP.NET MVC4使用MongoDB制作相冊(cè)管理》,本文關(guān)鍵詞  ASP.NET,MVC4,使用,MongoDB,制作,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ASP.NET MVC4使用MongoDB制作相冊(cè)管理》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于ASP.NET MVC4使用MongoDB制作相冊(cè)管理的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    亚洲一卡二卡三卡四卡无卡久久| 99精品欧美一区二区蜜桃免费 | 手机在线成人av| 色婷婷国产精品免| 欧美日韩亚洲综合在线 | 欧美一级生活片| 亚洲精品中文在线| 成人影视亚洲图片在线| 日本人亚洲人jjzzjjz| 91精品国产品国语在线不卡| 久久免费国产精品| 日韩经典一区二区| 成人免费看片载| 在线影视一区二区三区| 久久久国产一区二区三区四区小说 | 久久亚洲二区三区| 亚洲一区精品在线| 精品一区二区在线视频| 添女人荫蒂视频| 欧美三区在线视频| 亚洲欧美成人一区二区三区| 粉嫩aⅴ一区二区三区四区五区| 欧美日韩中文字幕视频| 精品国产不卡一区二区三区| 免费美女久久99| 黄色片视频免费观看| 欧美吻胸吃奶大尺度电影| 日韩美女视频19| av在线不卡免费看| 麻豆视频在线免费看| 国产精品白丝在线| 成人美女在线观看| 好吊色视频在线观看| 中文字幕在线一区| va亚洲va日韩不卡在线观看| 9.1人成人免费视频网站| 中文字幕一区视频| 99国产精品久| 欧美图区在线视频| 亚洲男人的天堂一区二区| 国产成人免费在线观看| 四虎地址8848| 国产精品高潮久久久久无| 奇米影视在线99精品| 少妇真人直播免费视频| 欧美肥妇毛茸茸| 亚洲国产精品人人做人人爽| 99re在线视频这里只有精品| 欧美日韩国产不卡| 视频一区二区三区在线| 亚洲人成人无码网www国产| 欧美一区二区三区在线视频| 日本一不卡视频| www.99热| 国产精品二三区| 91毛片在线观看| 欧美精品第一页| 麻豆91小视频| 日韩精品久久久久久久的张开腿让| 欧美激情一二三区| 99久久777色| 777午夜精品视频在线播放| 日本欧美加勒比视频| 女人十八毛片嫩草av| 国产欧美日韩精品在线| 欧美伊人久久久久久久久影院| 亚洲国产精品精华液网站| 国产高清成人久久| 久久久精品tv| 中文字幕无码毛片免费看| 欧美电影免费观看高清完整版 | 五月婷婷一区二区| 午夜精品久久久久久久久久久| 在线观看日本中文字幕| 亚洲丝袜精品丝袜在线| 色天使在线视频| 国产精品久久一卡二卡| 国产黑丝一区二区| 国产精品视频第一区| 国产xxxx视频| 国产精品久久久久桃色tv| 亚洲av成人精品一区二区三区| 国产视频一区在线观看| 制服.丝袜.亚洲.中文.综合懂| 精品久久一二三区| 99久久精品久久久久久清纯| 日韩一区二区三区在线观看| 国产成人精品三级麻豆| 欧美一区二区在线视频| 成人精品高清在线| 日韩精品一区二区三区视频播放 | 欧美一级日韩免费不卡| 国产成人亚洲综合色影视| 欧美福利视频一区| 国产91丝袜在线观看| 日韩三级.com| 久久黄色一级视频| 国产欧美一区二区精品性色| 久久性爱视频网站| 亚洲欧洲精品一区二区三区| 日韩网站在线播放| 一区二区视频在线| 自拍偷拍第9页| 日韩成人免费在线| 欧美三级日韩三级| 成人小视频免费观看| xnxx国产精品| 91视频啊啊啊| 亚洲天堂久久久久久久| 亚洲一二三四视频| 日韩**一区毛片| 欧美性videosxxxxx| 国产精品1024| 久久综合色一综合色88| 少妇被狂c下部羞羞漫画| 中文字幕一区二区三区蜜月| 日本人亚洲人jjzzjjz| 免费在线观看精品| 欧美人与禽zozo性伦| 99国产精品一区| 中文字幕日韩一区| 亚洲精品国产精品乱码在线观看| 玖玖九九国产精品| 日韩亚洲电影在线| 久久久老熟女一区二区三区91| 亚洲欧美日韩国产综合在线| 我要看黄色一级片| 久久国产婷婷国产香蕉| 欧美一区二区三区四区五区| 欧美性猛交乱大交| 亚洲美女淫视频| 色一情一伦一子一伦一区| 国产成人av福利| 欧美激情一区二区三区四区| 少妇精品无码一区二区免费视频 | 一级做a爱片久久| 在线欧美一区二区| av午夜一区麻豆| 亚洲婷婷国产精品电影人久久| 丝袜美腿小色网| 高清久久久久久| 中文字幕高清不卡| 在线观看亚洲网站| 成人夜色视频网站在线观看| 精品国产精品网麻豆系列| www..com.cn蕾丝视频在线观看免费版| 免费看黄色91| 欧美精品一区二区三| 素人fc2av清纯18岁| 麻豆中文一区二区| 久久久一区二区| 91ts人妖另类精品系列| 国产成人精品三级麻豆| 亚洲欧洲av在线| 久久久久亚洲AV成人| 手机看片国产精品| 亚洲成人精品一区| 欧美一级高清大全免费观看| 国产成人无码一区二区在线观看 | 成人手机在线视频| 亚洲久草在线视频| 欧美日韩视频专区在线播放| 国产精品扒开腿做爽爽爽a片唱戏| 日日夜夜精品视频天天综合网| 日韩欧美区一区二| 成人免费视频入口| 不卡av在线网| 一区二区久久久久久| 欧美一级国产精品| gv天堂gv无码男同在线观看| 成人手机电影网| 亚洲影视在线播放| 日韩欧美成人一区| 天堂av网手机版| 91在线一区二区三区| 视频一区中文字幕| 欧美日韩成人综合| 国产全是老熟女太爽了| 成人国产亚洲欧美成人综合网| 亚洲高清视频中文字幕| 久久一夜天堂av一区二区三区| 国产精品成人免费观看| 亚洲av片不卡无码久久| 成人h动漫精品一区二区| 视频一区视频二区在线观看| 国产精品女主播av| 欧美一区二区三区色| 乱h高h女3p含苞待放| 欲求不满的岳中文字幕| 成人午夜在线免费| 蜜臀av一区二区在线观看| 日韩理论片中文av| 精品美女一区二区三区| 在线中文字幕一区| 国产馆在线观看| 日本不卡视频一区| 成人动漫一区二区| 精品一二三四区| 亚洲成人中文在线| 国产精品久久久久毛片软件|