GridFS
GridFS is a specification within MongoDB that allows for storing and retrieving files that exceed the BSON-document size limit of 16 MB. DreamFactory's GridFS service uses a MongoDB connection to create a Remote File Service, so you can interact with as you would with any other remote file service, such as AWS S3 or Azure Blob Storage.
Contents
Service Config
Even though it’s a file storage service, you'll notice that the service config tab looks very similar to a MongoDB database service. On the Config tab, enter in any MongoDB specific connection parameters.
The database you select in the config will be the database where the two GridFS collections are located. These will be by default, fs.files and fs.chunks. Leaving the Bucket field empty will result in the default collections being created, however, you can choose another name for the collection to replace the "fs" portion of the collection(s) if you wish. This will allow for multiple GridFS collections on the same database if you have multiple services running.
Using GridFS
GridFS is primarily used for blog storage and is set up for streaming. However, the DreamFactory implementation of GridFS includes the ability to add folders and files within folders if you so choose. A simple GET call to your service endpoint will retrieve the top-level root contents. Keep in mind that you can also use the Files tab in DreamFactory Admin App to quickly navigate your GridFS service.
GET http://192.168.10.10/api/v2/test_gridfs
Making a call to the same endpoint with the parameter "full_tree" as true will result in every file and virtual folder in the collection:
GET http://192.168.10.10/api/v2/test_gridfs?full_tree=true
Notice that you'll find there is now an mp4 movie stored within our folder. As a reminder, you do not have to use virtual folders with GridFS.
Retrieving Blobs
With the GridFS service, a GET call to a specific file will result in the streaming of that data. For example, if we wanted to retrieve the movie data of our sample file, we would simply make a GET call to the endpoint associated with the file:
GET http://192.168.10.10/api/v2/test_gridfs/SampleVideo_1280x720_5mb.mp4
Whatever blob data is in GridFS will stream to the caller. Content-disposition is automatically resolved as well as type is identified if possible. In this example, we are streaming a movie through Postman:
Creating Directories
To create a virtual directory in DreamFactory's GridFS service, simply POST to a new endpoint with the folder's name and a trailing slash "/".
POST http://192.168.10.10/api/v2/test_gridfs/myVirtualDirectory/
And the response is 201 Created with:
{ "name": "myVirtualDirectory", "path": "myVirtualDirectory/" }
You can now add files or blobs to this virtual directory.
Creating Files/ Uploading Data
Without a trailing slash, a POST call with a filename will result in an empty file being created. However, to add a file with data, simply pass the appropriate headers along with the data you want to upload.
POST http://192.168.10.10/api/v2/test_gridfs/myVirtualDirectory/testfile.png
And our response is 201 Created:
{ "name": "testfile.png", "path": "myVirtualDirectory/testfile.png", "type": "file" }
Let's now make a GET call to test the file:
GET http://192.168.10.10/api/v2/test_gridfs/myVirtualDirectory/testfile.png