中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

ASP.NET MVC4使用MongoDB制作相冊管理
來源:易賢網 閱讀:1239 次 日期:2016-08-05 14:43:06
溫馨提示:易賢網小編為您整理了“ASP.NET MVC4使用MongoDB制作相冊管理”,方便廣大網友查閱!

這篇文章主要介紹了ASP.NET MVC4使用MongoDB制作相冊管理的相關資料,感興趣的小伙伴們可以參考一下

ASP.NET MVC4使用MongoDB制作相冊管理實例分享

TIPS:1.Image轉成Base64保存到mongodb字段

2.數據模型是嵌套的關聯 

首先定義Model層: 

public class Photo : IEquatable<Photo>

  {

    [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 IList<Photo> Pictures { get; set; }

    public Album() { Pictures = new List<Photo>(); TitlePhoto = new Photo(); }

    public Album(string name, string owner, Photo pic)

    {

      Name = name;

      Owner = owner;

      TitlePhoto = pic;

      Pictures = new List<Photo>();

      TitlePhoto = new Photo();

    }

    public bool InsertPicture(Photo pic)

    {

      if (!Pictures.Contains(pic))

      {

        Pictures.Add(pic);

        return true;

      }

      else

        throw new ArgumentException();

    }

    public bool InsertPictures(List<Photo> 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 IMongoCollection<Album> 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.GetCollection<Album>(collectionName, new MongoCollectionSettings { AssignIdOnInsert = true });

   }

   public void SetCollection(string collectionName)

   {

     this.collectionName = collectionName;

     collection = database.GetCollection<Album>(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 List<Album> GetAlbumsByUserName(string username)

   {

     var projection = Builders<Album>.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)

       .Project<Album>(projection).ToList();

     return result;

   }

   public Album GetPicturesByAlbumName(string albumName)

   {

     var projection = Builders<Album>.Projection

       .Include(a => a.Pictures);

     var result = collection

       .Find(a => a.Owner == HttpContext.Current.User.Identity.Name & a.Name == albumName)

       .Project<Album>(projection).FirstOrDefault();

     return result;

   }

   public void UpdateAlbumAddPhoto(string albumName, Photo photo)

   {

     var builder = Builders<Album>.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 = Builders<Album>.Update.Push(a => a.Pictures, picture);

           collection.UpdateOne(filter, update, new UpdateOptions { IsUpsert=true });

     }

   }

   public void DeletePhotoFromAlbum(string albumName, string photoName)

   {

     var builder = Builders<Album>.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 = Builders<Album>.Update

         .PullFilter(a => a.Pictures, Builders<Photo>.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>我的相冊</h2>

@Html.Partial("_MyAlbums", (List<Album>)ViewBag.Albums)

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

{

  @Html.AntiForgeryToken()

  <div class="form-horizontal">

    <h4>創建新相冊: </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="要求標題圖片."/>

        @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", (List<Photo>)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="請選擇圖像" />

        @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>

以上就是本文的全部內容,希望對大家的學習有所幫助

更多信息請查看網絡編程
易賢網手機網站地址:ASP.NET MVC4使用MongoDB制作相冊管理
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
一区二区欧美国产| 国产亚洲aⅴaaaaaa毛片| 国产精品视频xxxx| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美区视频在线观看| 亚洲片在线资源| 女人色偷偷aa久久天堂| 亚洲精品乱码| 国产精品久久久久久模特| 香蕉久久夜色精品国产使用方法| 国产一区在线播放| 欧美高清视频一区二区三区在线观看| 日韩视频中文| 国产性猛交xxxx免费看久久| 久久综合狠狠综合久久综合88| 亚洲欧洲日本国产| 国产欧美日韩不卡免费| 免费观看在线综合色| 一区二区三区欧美激情| 国内精品美女在线观看| 欧美日产在线观看| 午夜一区二区三视频在线观看 | 亚洲国产精品久久久久| 亚洲丝袜av一区| 国产精品国产三级国产aⅴ9色| 中文精品视频一区二区在线观看| 亚洲综合另类| 另类尿喷潮videofree | 另类国产ts人妖高潮视频| 国产精品日韩精品| 欧美大片免费| 欧美日韩亚洲国产一区| 亚洲欧美欧美一区二区三区| 一区二区三区蜜桃网| 欧美日韩第一区| 久久综合狠狠| 国内精品免费在线观看| 国产精品久久久亚洲一区| 欧美日韩国产色视频| 欧美小视频在线| 国产精品久久久久久久久动漫| 国产亚洲一级| 美女精品自拍一二三四| 先锋影音网一区二区| 在线日韩av片| 亚洲国产清纯| 永久免费视频成人| 欧美自拍丝袜亚洲| 久久香蕉国产线看观看网| 国产日韩欧美一区二区| 欧美人成在线视频| 久久日韩精品| 久久精品国产77777蜜臀| 在线一区欧美| 亚洲视频网在线直播| 日韩午夜在线观看视频| 亚洲精品国产视频| 最近看过的日韩成人| 亚洲国产精品黑人久久久| 影音先锋欧美精品| 激情综合中文娱乐网| 激情综合亚洲| 亚洲国产成人久久综合| 亚洲国产欧美日韩另类综合| 亚洲国产精品欧美一二99| 亚洲国产精品www| 亚洲人成久久| 一区二区精品| 亚洲男人第一网站| 欧美一级在线亚洲天堂| 欧美中文在线观看| 久久久夜精品| 欧美精品99| 欧美视频二区| 国产欧美亚洲视频| 一区免费观看视频| 日韩视频在线播放| 亚洲欧美日韩一区二区三区在线| 欧美在线一级va免费观看| 久久久欧美一区二区| 欧美成人激情在线| 国产精品xnxxcom| 国产亚洲欧美一区二区| 亚洲高清视频在线| 亚洲视频在线一区观看| 午夜视频一区二区| 开元免费观看欧美电视剧网站| 欧美国产视频一区二区| 国产精品黄页免费高清在线观看| 国产亚洲人成网站在线观看| 91久久精品国产91久久性色tv| 在线一区亚洲| 久久亚洲精品网站| 国产精品久久77777| 很黄很黄激情成人| 亚洲作爱视频| 久久九九电影| 欧美三级中文字幕在线观看| 国产欧美一区二区视频| 亚洲黑丝在线| 欧美制服丝袜第一页| 欧美极品aⅴ影院| 国产一区二区精品在线观看| 亚洲精品国产精品国产自| 欧美亚洲综合久久| 欧美精品一区三区在线观看| 国产欧美一区二区三区在线看蜜臀| 亚洲第一精品福利| 欧美一级精品大片| 欧美日韩亚洲一区二区三区在线| 国内精品久久久久久久影视麻豆| 正在播放亚洲一区| 欧美高清视频免费观看| 激情校园亚洲| 午夜在线精品偷拍| 国产精品成人久久久久| 亚洲欧洲一级| 久久综合九色| 国产亚洲人成网站在线观看| 中日韩视频在线观看| 欧美大片一区二区三区| 韩国一区二区三区美女美女秀| 在线天堂一区av电影| 欧美成人中文| 1769国内精品视频在线播放| 久久aⅴ乱码一区二区三区| 国产精品福利片| 在线视频一区二区| 欧美日韩国产综合网| 亚洲国产免费看| 久久综合九色欧美综合狠狠| 国产亚洲欧美日韩美女| 亚洲欧美一区二区原创| 国产精品区一区二区三| 亚洲女同性videos| 国产精品亚洲а∨天堂免在线| 亚洲视频二区| 国产精品国色综合久久| 亚洲女人天堂av| 国产日产欧美一区| 久久国产精品亚洲va麻豆| 国产一区二区三区观看| 久久久国际精品| 1024成人| 欧美国产高清| 一区二区三区久久精品| 国产精品久久久久国产a级| 亚洲欧美另类久久久精品2019| 国产精品久久久久久久久久免费看| 亚洲午夜一区| 国产亚洲精久久久久久| 久久久久se| 亚洲三级视频在线观看| 欧美三区美女| 欧美在线影院在线视频| 国产精品素人视频| 亚洲欧美一区二区在线观看| 亚洲一级片在线观看| 午夜一区二区三区在线观看| 国产日产欧产精品推荐色 | 亚洲一区中文| 国产精品综合视频| 久久久久久欧美| 亚洲欧洲一区二区在线播放| 欧美日韩一区二区在线视频| 午夜在线a亚洲v天堂网2018| 激情综合色综合久久| 欧美日韩不卡在线| 亚洲欧美日韩一区二区三区在线 | 99天天综合性| 国产婷婷色一区二区三区四区| 美女网站久久| 亚洲一区二区在线| 依依成人综合视频| 最新中文字幕亚洲| 国内久久婷婷综合| 欧美久久九九| 9色精品在线| 欧美激情视频一区二区三区在线播放 | 亚洲国产精品一区二区久 | 亚洲欧美另类国产| aa亚洲婷婷| 亚洲欧美成人综合| 亚洲影院污污.| 亚洲一级一区| 久久精品视频在线看| 亚洲综合首页| 亚洲在线视频一区| 在线视频亚洲一区| 狠狠色伊人亚洲综合网站色| 国产模特精品视频久久久久 | 久久天天躁夜夜躁狠狠躁2022| 午夜国产精品影院在线观看| 亚洲天堂av综合网| 亚洲一区二区精品视频| 国产婷婷成人久久av免费高清 | 亚洲欧美日韩精品久久| 久久成人这里只有精品| 欧美黄色一级视频| 欧美日韩国产一区二区三区地区|