NoSql-MongoDB GridFS+ASP.NET MVC實現上傳,顯示,

來源:互聯網
上載者:User

NoSql-MongoDB GridFS+ASP.NET MVC實現上傳,顯示,

     之前一篇文章介紹了如何在dos視窗下對MongoDB進行一些簡單的操作,但是不管學習什麼,最終還是要應用於自己的項目當中,本篇主要介紹在MVC架構中如何應用於我們的MongoDB。

GridFS介紹:

     GridFS是MongoDb中的一個內建功能,可以用於存放大量小檔案。我們可以使用MongoVUE來輔助管理。

使用前提-MongoDB驅動安裝:

     對於MongoDB驅動,目前主要有兩種-官方驅動,samus驅動,我們再此使用官方驅動進行操作,:https://github.com/mongodb/mongo-csharp-driver/downloads

下載完成之後,進行解壓縮包得到兩個檔案:

  • MongoDB.Bson.dll   序列化,Json相關
  • MongoDb.Driver.dll   驅動

     將其加入到項目之中,添加引用,下邊我們來看Demo實現:實現的效果就是一個簡單的上傳頁面和上傳view圖片的介面。

利用GridFS上傳圖片:MongoDBHelper(Controller):串連資料庫,上傳方法
namespace MongoDBTest.Controllers{    public class MongoDBHelperController : Controller    {        private static MongoDatabase DB;        public static string fileTable = "files";        /// <summary>        /// 串連資料庫設定        /// </summary>        public void init()        {            //使用AppSettings方式和設定檔串連,靈活控制MongoDb資料庫位置            string ConnectionString = ConfigurationManager.AppSettings["mondoDbConnection"];            //串連本地的資料庫            //string ConnectionString = "127.0.0.1";            //串連不成功,提示            if (String.IsNullOrEmpty(ConnectionString))            {                throw new ArgumentNullException("Connection string not found");            }            //建立串連池            MongoServerSettings mongoSetting = new MongoServerSettings();            mongoSetting.MaxConnectionPoolSize = 15000;//設定最大串連池            mongoSetting.WaitQueueSize = 500;//設定等待隊列數            mongoSetting.Server = new MongoServerAddress(ConnectionString, 27017);            int count = MongoServer.MaxServerCount;            MongoServer server = MongoServer.Create(mongoSetting);//建立串連資料檔案            DB = server.GetDatabase("DB3");//建立資料庫連接,串連的字串名稱        }        public void ProcessRequest()        {            init();            //從MVC傳值,擷取            string action = Request.QueryString["actions"];            //通過action值來判斷是上傳,還是擷取,還是下載等            switch (action)            {                case "DOWNLOAD": DownFile(); break; //下載檔案                case "UPLOAD": Upload(); break; //上傳檔案            }        }        //上傳檔案        public void Upload()        {            try            {                HttpPostedFileBase file = (HttpPostedFileBase)Request.Files["file"];                //擷取上傳檔案的長度                int nFileLen = file.ContentLength;                //擷取上傳檔案的值                string nFileName = file.FileName;                //利用GridFS 建立                MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };                MongoGridFS fs = new MongoGridFS(DB, fsSetting);                byte[] myData = new Byte[nFileLen];                file.InputStream.Read(myData, 0, nFileLen);                //調用Write、WriteByte、WriteLine函數時需要手動設定上傳時間                //通過Metadata 添加附加資訊                MongoGridFSCreateOptions option = new MongoGridFSCreateOptions();                option.UploadDate = DateTime.Now;                //建立檔案,檔案並儲存資料                using (MongoGridFSStream gfs = fs.Create(file.FileName, option))                {                    gfs.Write(myData, 0, nFileLen);                    gfs.Close();                    Response.Write("恭喜您" + nFileName + "檔案上傳成功!");                }            }            catch (Exception e)            {                Response.Write("Sorry your file is not upload successfully!" + e.Message);            }            Response.End();        }
        /// <summary>        /// 下載檔案方法        /// </summary>        public void DownFile()        {            //擷取檔案值            string filename = Request.QueryString["value"];            //擷取檔案類型            Response.ContentType = "application/octet-stream";            //實現下載+檔案名稱            Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);            //擷取圖片名            MongoGridFSSettings fsSetting = new MongoGridFSSettings() { Root = fileTable };            //通過檔案名稱去資料庫查值            MongoGridFS fs = new MongoGridFS(DB, fsSetting);            MongoGridFSFileInfo gfInfo = new MongoGridFSFileInfo(fs, filename);            //方法一,很簡潔            fs.Download(Response.OutputStream, filename);            Response.End();        }    }}
MongoDbTest(View):上傳介面顯示
<html><body>    <div>        @*找到ProcessRequest,通過擷取Action值來執行操作*@        @using (Html.BeginForm("ProcessRequest", "MongoDBHelper", new { actions = "UPLOAD" }, FormMethod.Post, new { enctype = "multipart/form-data" }))        {            <input type="file" name="file" id="file" style="font-size:20px;" />            <br/>            <br/>            <input type="submit" value="上傳" style="font-size:20px" />        }    </div></body></html>
介面顯示+上傳成功顯示:

從MongoDb讀取圖片,音頻,顯示到View視圖:MongoDBTest(Controller):賦值,尋找條件
        /// <summary>        /// 通過學號拼接圖片名稱顯示到介面-霍亞靜-2015年9月12日02:37:39        /// </summary>        /// <returns></returns>        public ActionResult ImgTest()        {            //初始化            string strPhotoUser = "";            //設定假資料,拼接圖片名稱            strPhotoUser += 130131199203216646 + ".jpg";            string strVoice = "";            strVoice += 123 + ".mp3";            //給ViewData賦值,給MongoDBHelper 下的ProcessRequest方法賦值            ViewData["img"] = "/MongoDBHelper/ProcessRequest?actions=DOWNLOAD&value=" + strPhotoUser;            //給ViewDate賦值,給MongoDBHelper 下的ProcessRequest方法賦值            ViewData["voice"] = "/MongoDBHelper/ProcessRequest?actions=DOWNLOAD&value=" + strVoice;            return View();        }
     註:再此,只是賦了一個假資料,思想都一樣,通過拼接的方式得到圖片或者音頻等的名稱,去MongoDb尋找,顯示。ImgTest(View):
<html><body>    <div>        @*利用img屬性擷取ViewData值*@        <img src="@ViewData["img"]" style="width:auto;height:auto;" />    </div>    <div>        @*<p><a href="../../123.mp3">點擊</a></p>*@        @*出現介面,自動播放 loop屬性是迴圈播放的,所以在此省略*@        @*利用audio,HTML外掛程式擷取ViewData音頻*@        <audio src="@ViewData["voice"]" preload="auto" controls autoplay >            <div class="audioplayer audioplayer-playing"></div>        </audio>    </div></body></html>
我們賦值兩個ViewData,圖片+音頻,最終顯示到視圖的效果:
     這樣就達到我們想要的效果了。對於MongoDB,我們可以採用MongoVUE軟體來輔助管理,看看我們上傳的圖片和音頻:

     善於用工具來輔助管理自己的學習,提高效率。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.