Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
MONGOC_GRIDFS_BUCKET_T(3)	   libmongoc	     MONGOC_GRIDFS_BUCKET_T(3)

SYNOPSIS
	  #include <mongoc/mongoc.h>

	  typedef struct _mongoc_gridfs_bucket_t mongoc_gridfs_bucket_t;

DESCRIPTION
       mongoc_gridfs_bucket_t  provides	a spec-compliant MongoDB GridFS	imple-
       mentation, superseding mongoc_gridfs_t. See the GridFS MongoDB documen-
       tation.

THREAD SAFETY
       mongoc_gridfs_bucket_t is NOT thread-safe and should only  be  used  in
       the same	thread as the owning mongoc_client_t.

LIFECYCLE
       It  is an error to free a mongoc_gridfs_bucket_t	before freeing all de-
       rived instances of mongoc_stream_t.  The	 owning	 mongoc_client_t  must
       outlive the mongoc_gridfs_bucket_t.

EXAMPLE
       example-gridfs-bucket.c

	  #include <stdio.h>
	  #include <stdlib.h>

	  #include <mongoc/mongoc.h>

	  int
	  main (int argc, char *argv[])
	  {
	     const char	*uri_string = "mongodb://localhost:27017/?appname=new-gridfs-example";
	     mongoc_client_t *client;
	     mongoc_database_t *db;
	     mongoc_stream_t *file_stream;
	     mongoc_gridfs_bucket_t *bucket;
	     mongoc_cursor_t *cursor;
	     bson_t filter;
	     bool res;
	     bson_value_t file_id;
	     bson_error_t error;
	     const bson_t *doc;
	     char *str;
	     mongoc_init ();

	     if	(argc != 3) {
		fprintf	(stderr, "usage: %s SOURCE_FILE_PATH FILE_COPY_PATH\n",	argv[0]);
		return EXIT_FAILURE;
	     }

	     /*	1. Make	a bucket. */
	     client = mongoc_client_new	(uri_string);
	     db	= mongoc_client_get_database (client, "test");
	     bucket = mongoc_gridfs_bucket_new (db, NULL, NULL,	&error);
	     if	(!bucket) {
		printf ("Error creating	gridfs bucket: %s\n", error.message);
		return EXIT_FAILURE;
	     }

	     /*	2. Insert a file.  */
	     file_stream = mongoc_stream_file_new_for_path (argv[1], O_RDONLY, 0);
	     res = mongoc_gridfs_bucket_upload_from_stream (bucket, "my-file", file_stream, NULL, &file_id, &error);
	     if	(!res) {
		printf ("Error uploading file: %s\n", error.message);
		return EXIT_FAILURE;
	     }

	     mongoc_stream_close (file_stream);
	     mongoc_stream_destroy (file_stream);

	     /*	3. Download the	file in	GridFS to a local file.	*/
	     file_stream = mongoc_stream_file_new_for_path (argv[2], O_CREAT | O_RDWR, 0);
	     if	(!file_stream) {
		perror ("Error opening file stream");
		return EXIT_FAILURE;
	     }

	     res = mongoc_gridfs_bucket_download_to_stream (bucket, &file_id, file_stream, &error);
	     if	(!res) {
		printf ("Error downloading file	to stream: %s\n", error.message);
		return EXIT_FAILURE;
	     }
	     mongoc_stream_close (file_stream);
	     mongoc_stream_destroy (file_stream);

	     /*	4. List	what files are available in GridFS. */
	     bson_init (&filter);
	     cursor = mongoc_gridfs_bucket_find	(bucket, &filter, NULL);

	     while (mongoc_cursor_next (cursor,	&doc)) {
		str = bson_as_canonical_extended_json (doc, NULL);
		printf ("%s\n",	str);
		bson_free (str);
	     }

	     /*	5. Delete the file that	we added. */
	     res = mongoc_gridfs_bucket_delete_by_id (bucket, &file_id,	&error);
	     if	(!res) {
		printf ("Error deleting	the file: %s\n", error.message);
		return EXIT_FAILURE;
	     }

	     /*	6. Cleanup. */
	     mongoc_stream_close (file_stream);
	     mongoc_stream_destroy (file_stream);
	     mongoc_cursor_destroy (cursor);
	     bson_destroy (&filter);
	     mongoc_gridfs_bucket_destroy (bucket);
	     mongoc_database_destroy (db);
	     mongoc_client_destroy (client);
	     mongoc_cleanup ();

	     return EXIT_SUCCESS;
	  }

       SEE ALSO:
	  The MongoDB GridFS specification.

	  The non spec-compliant mongoc_gridfs_t.

AUTHOR
       MongoDB,	Inc

COPYRIGHT
       2009-present, MongoDB, Inc.

1.30.2				 Apr 12, 2025	     MONGOC_GRIDFS_BUCKET_T(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=mongoc_gridfs_bucket_t&sektion=3&manpath=FreeBSD+Ports+14.3.quarterly>

home | help