#mongodb #storage #file

mongo-file-center

To store perennial files and temporary files in MongoDB

18 releases

✓ Uses Rust 2018 edition

0.4.1 Jun 27, 2020
0.4.0 Mar 17, 2020
0.3.0 Mar 7, 2020
0.2.0 Sep 17, 2019
0.1.7 Nov 16, 2018

#258 in Database interfaces

Download history 71/week @ 2020-03-21 20/week @ 2020-03-28 22/week @ 2020-04-04 109/week @ 2020-04-11 6/week @ 2020-04-18 2/week @ 2020-04-25 3/week @ 2020-05-02 1/week @ 2020-05-09 1/week @ 2020-05-16 19/week @ 2020-05-23 36/week @ 2020-05-30 18/week @ 2020-06-06 1/week @ 2020-06-13 1/week @ 2020-06-20 42/week @ 2020-06-27 19/week @ 2020-07-04

74 downloads per month
Used in 2 crates

MIT license

53KB
1K SLoC

File Center on MongoDB

Build Status

This crate aims to build an easy-to-use and no-redundant file storage based on MongoDB.

For perennial files, each of them is unique in the database, and can be retrieved many times without limitation.

For temporary files, they are allowed to be duplicated, but each instance can be retrieved only one time in a minute after it is created.

The file data can be stored in a collection or GridFS. It depends on the size of data. If the size is bigger than the threshold, it stores in GridFS, or it stores in a collection. The max threshold is 16770KB. The default threshold is 255KiB.

Temporary files are suggested to store in a collection, otherwise you have to clear the garbage in GridFS.

Example

extern crate mongo_file_center;
extern crate mime;

use mongo_file_center::{FileCenter, FileData};

const HOST: &str = "localhost";
const PORT: u16 = 27017;

let database = "test_my_file_storage";

let file_center = FileCenter::new(HOST, PORT, database).unwrap();

let file = file_center.put_file_by_path("/path/to/file", Some("file_name"), Some(mime::IMAGE_JPEG)).unwrap();

let file_id = file.get_object_id();

let id_token = file_center.encrypt_id(&file_id); // this token is safe in public

let file_id = file_center.decrypt_id_token(&id_token).unwrap();

let r_file = file_center.get_file_item_by_id(file_id).unwrap().unwrap();

match r_file.into_file_data() {
    FileData::GridFS(file) => {
        // do something
    }
    FileData::FileData(data) => {
        // do something
    }
}

Crates.io

https://crates.io/crates/mongo-file-center

Documentation

https://docs.rs/mongo-file-center

License

MIT

Dependencies

~9MB
~184K SLoC