MongoDB C++ gridfs worked example

使用libmongoc,参考:http://mongoc.org/libmongoc/current/mongoc_gridfs_t.html

复制代码
#include <mongoc.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>


class MongoGridFS {
public:
    MongoGridFS(const char* db);
    ~MongoGridFS();

    void saveFile(const char* input_file_path, const char* filename);
private:
    mongoc_gridfs_t *gridfs;
    mongoc_client_t *client;
};


MongoGridFS::MongoGridFS(const char* db) {
    assert(db != NULL);
    mongoc_init ();
    /* connect to localhost client */
    client = mongoc_client_new ("mongodb://127.0.0.1:27017?appname=gridfs-example");
    assert (client);
    mongoc_client_set_error_api (client, 2);

    /* grab a gridfs handle in test prefixed by fs */
    bson_error_t error;
    gridfs = mongoc_client_get_gridfs (client, db, "fs", &error);
    assert (gridfs);
}


void MongoGridFS::saveFile(const char* input_file_path, const char* filename) {
    assert(input_file_path != NULL && filename != NULL);
    mongoc_stream_t *stream = mongoc_stream_file_new_for_path (input_file_path, O_RDONLY, 0);
    assert (stream);

    mongoc_gridfs_file_opt_t opt = {0};
    opt.filename = filename;

    /* the driver generates a file_id for you */
    mongoc_gridfs_file_t *file = mongoc_gridfs_create_file_from_stream (gridfs, stream, &opt);
    assert (file);

    mongoc_gridfs_file_save (file);
    mongoc_gridfs_file_destroy (file);
}


MongoGridFS::~MongoGridFS() {
     mongoc_gridfs_destroy (gridfs);
     mongoc_client_destroy (client);
     mongoc_cleanup ();
}


int
main (int argc, char *argv[])
{
    MongoGridFS gridfs("test2gridfs");
    gridfs.saveFile("test.py", "test.py");
    return 0;
}
复制代码

 

posted @   bonelee  阅读(1394)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示