mongodb Gridfs操作

來源:互聯網
上載者:User

標籤:binary   tin   ted   成功   rem   lis   txt   god   大小   

GridFS 介紹

GridFS是MongoDB規範用於儲存和檢索大檔案,片,音頻檔案,視頻檔案等。這是一種檔案系統用來隱藏檔,但資料存放區於MongoDB集合中。GridFS隱藏檔比其文檔大小16MB限制的更大能力。

GridFS的劃分一個檔案分成Block Storage資料每個塊在一個單獨的檔案,每個最大尺寸255K。

GridFS預設使用兩個集合 fs.files 和 fs.chunks 儲存該檔案的中繼資料和塊。每組塊標識其唯一的_id ObjectID欄位。fs.files切斷作為父檔案。 fs.chunks 文檔 files_id 欄位連結塊到其父檔案。

以下是fs.files集合的樣本檔案:

{   "filename": "test.txt",   "chunkSize": NumberInt(261120),   "uploadDate": ISODate("2014-04-13T11:32:33.557Z"),   "md5": "7b762939321e146569b07f72c62cca4f",   "length": NumberInt(646)}

檔案指定的檔案名稱,塊大小,上傳日期,和長度。

以下是 fs.chunks 檔案的樣本檔案:

{   "files_id": ObjectId("534a75d19f54bfec8a2fe44b"),   "n": NumberInt(0),   "data": "Mongo Binary Data"}
將檔案添加到GridFS:

現在,我們將使用GridFS的put命令儲存MP3檔案。 為此,我們將使用存在於MongoDB的安裝資料夾下的bin檔案夾的mongofiles.exe工具。

開啟命令提示字元,導航到MongoDB的安裝資料夾下的bin檔案夾中的mongofiles.exe,並鍵入下面的代碼:

>mongofiles.exe -d gridfs put song.mp3

這裡,gridfs上在檔案儲存體在資料庫的資料庫名稱。 如果資料庫不存在,MongoDB會自動動態建立一個新文檔。 Song.mp3的是上傳的檔案的名稱。要查看資料庫檔案的檔案,你可以使用查詢找到:

>db.fs.files.find()

上面的命令返回以下文檔:

{   _id: ObjectId(‘534a811bf8b4aa4d33fdf94d‘),    filename: "song.mp3",    chunkSize: 261120,    uploadDate: new Date(1397391643474), md5: "e4f53379c909f7bed2e9d631e15c1c41",   length: 10401959 }

我們也可以看到在fs.chunks集合涉及使用下面的代碼儲存的檔案都存在於塊中,使用以前的查詢返迴文檔ID:

>db.fs.chunks.find({files_id:ObjectId(‘534a811bf8b4aa4d33fdf94d‘)})

在我的樣本中,該查詢返回40個文檔,是整個MP3檔案劃分成的40塊資料。

 

 

前言

GridFS是一種將大型檔案儲存體在MongoDB的檔案規格:

 

資料庫支援以BSON格式儲存二進位對象。 但是MongoDB中BSON對象最大不能超過4MB。

GridFS 規範提供了一種透明的機制,可以將一個大檔案分割成為多個較小的文檔。

為實現這點,該規範指定了一個將檔案分塊的標準。每個檔案都將在檔案集合對象中儲存一個中繼資料對象,一個或多個塊對象可被組合儲存在一個塊集合中。

 

上傳檔案

  • Shell

        mongofiles put xxx.txt

        常用參數如下:

 

        -d 指定資料庫 

        -u –p 指定使用者名稱,密碼

        -h 指定主機

        -port 指定主機連接埠

        -r 如果存在同名檔案則在put成功後刪除其他同名檔案

 

        通過這樣的命令就可以把檔案上傳到fs集合中。

  • Java

        //擷取db

        MongoClient mClient = new MongoClient("10.211.55.8");

        db = mClient.getDB("test");

        //得到Gridfs對象

        GridFS fs = new GridFS(db);

        //訪問要上傳的檔案

        File file = new File("/Users/luoaz/05testDir/files/test1.txt");

        //執行保持

        GridFSInputFile gfFile = fs.createFile(file);

        gfFile.save();

下載檔案

  • Shell

        mongofiles get xxx.txt

        常用參數如下:

 

        -d 指定資料庫 

        -u –p 指定使用者名稱,密碼

        -h 指定主機

        -port 指定主機連接埠

        -l 下載到本地的檔案名稱,預設和資料庫中的名字一致

 

        通過這樣的命令就可以把檔案從fs集合中下載到本地。

  • Java

        Java 下載的重點是怎麼擷取到檔案流,擷取到檔案流後就跟普通的保持檔案到本地一樣了。

          //擷取db

        MongoClient mClient = new MongoClient("10.211.55.8");

        db = mClient.getDB("test");

        //得到Gridfs對象

        GridFS fs = new GridFS(db);

        

        //要下載到的檔案路徑

        File file = new File("/Users/files/down_test1.txt");

        FileOutputStream os = new FileOutputStream(file);

                        

        //獲得檔案流

        InputStream is = fs.findOne(new BasicDBObject("filename","test1.txt")).getInputStream();

                        

        //下載

        byte[] bytes = new byte[1024];

        while(is.read(bytes)>0){

                os.write(bytes);

        }

        os.flush();

        os.close();

 

刪除檔案

  • Shell

        mongofiles delete xxx.txt

        刪除指定名稱的檔案,如果存在同名檔案則都刪除

        常用參數如下:

 

        -d 指定資料庫 

        -u –p 指定使用者名稱,密碼

        -h 指定主機

        -port 指定主機連接埠

  • Java

        //擷取db

        MongoClient mClient = new MongoClient("10.211.55.8");

        db = mClient.getDB("test");

        //得到Gridfs對象

        GridFS fs = new GridFS(db);

                        

        //刪除指定檔案名稱的檔案

        fs.remove("test1.txt");

查看檔案

  • Shell

        1、list 

                顯示所有檔案

                mongofiles list xx.txt

                顯示所有的指定檔案名稱的檔案

        2、search

                搜尋指定名稱的檔案,可以模糊搜尋

                mongofiles list xx.txt

                mongofiles list .txt

  • Java

        這個就跟MongoDB的find用法一樣了

 

 

 

/*//儲存檔案
GridFSFile file = myFS.createFile(new File("D:/aa.png"));
file.save(); */

//輸出檔案
GridFSDBFile file1 =myFS.findOne("aa.png");
file1.writeTo(new File("D:/image1.png"));

//刪除檔案
/*GridFSDBFile file =myFS.findOne("image1.jpg");
myFS.remove((ObjectId) file2.getId());*/

mongodb Gridfs操作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.