## GridFile
**Kind**: global class
* [GridFile](#GridFile)
* [new GridFile()](#new_GridFile_new)
* _instance_
* [.length](#GridFile+length) : Number
* [.chunkSize](#GridFile+chunkSize) : Number
* [.uploadDate](#GridFile+uploadDate) : Date
* [.md5](#GridFile+md5) : String
* [.filename](#GridFile+filename) : String
* [.contentType](#GridFile+contentType) : String
* [.metadata](#GridFile+metadata) : Any
* [.aliases](#GridFile+aliases) : Array.<String>
* [.createdAt](#GridFile+createdAt) : Date
* [.chunkSizeBytes](#GridFile+chunkSizeBytes) : Number
* [.getUploadStream](#GridFile+getUploadStream) ⇒ GridFSBucketWriteStream
* [.getDownloadStream](#GridFile+getDownloadStream) ⇒ GridFSBucketReadStream
* [.uploadStream](#GridFile+uploadStream) ⇒ GridFSBucketWriteStream
* [.downloadStream](#GridFile+downloadStream) ⇒ GridFSBucketWriteStream
* [.upload](#GridFile+upload) ⇒ [Promise.<GridFile>](#GridFile)
* [.download](#GridFile+download) ⇒ Promise.<Void>
* _static_
* [.getBucket](#GridFile.getBucket) ⇒ GridFSBucket
* [.findOneAndDelete](#GridFile.findOneAndDelete) ⇒ [Promise.<GridFile>](#GridFile)
* [.findByIdAndDelete](#GridFile.findByIdAndDelete) ⇒ [Promise.<GridFile>](#GridFile)
### new GridFile()
Mongoose schema for MongoDB GridFS
```javascript
const mongoose = require('mongoose')
const schema = require('gridfile')
const GridFile = mongoose.model('GridFile', schema)
const gridFile = new GridFile()
```
### gridFile.length : Number
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.chunkSize : Number
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.uploadDate : Date
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.md5 : String
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.filename : String
A MD5 hash is auto-generated when a file is uploaded
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.contentType : String
Value is be used as `contentType` option when opening an upload stream: [GridFSBucket#openUploadStream](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#openUploadStream)
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.metadata : Any
Value is be used as `metadata` option when opening an upload stream: [GridFSBucket#openUploadStream](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#openUploadStream)
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.aliases : Array.<String>
Value is be used as `aliases` option when opening an upload stream: [GridFSBucket#openUploadStream](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#openUploadStream)
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.createdAt : Date
Alias for GridFile#uploadDate
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.chunkSizeBytes : Number
Value is be used as `chunkSizeBytes` option when opening an upload stream: [GridFSBucket#openUploadStream](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#openUploadStream)
**Kind**: instance property of [GridFile](#GridFile)
### gridFile.getUploadStream ⇒ GridFSBucketWriteStream
Get a GridFS stream to upload a file
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: GridFSBucketWriteStream - Upload Stream
**Example**
```js
const uploadStream = gridFile.getUploadStream()
```
### gridFile.getDownloadStream ⇒ GridFSBucketReadStream
Get a GridFS stream to download a file
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: GridFSBucketReadStream - Download Stream
**Example**
```js
const downloadStream = gridFile.getDownloadStream()
```
### gridFile.uploadStream ⇒ GridFSBucketWriteStream
Upload a file to GridFS
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: GridFSBucketWriteStream - Upload Stream
| Param | Type | Description |
| --- | --- | --- |
| FileStream | Stream | Read stream of file to upload |
**Example**
```js
const fs = require('fs')
const fileStream = fs.createReadStream('/path/to/file')
const uploadStream = gridFile.uploadStream(fileStream)
uploadStream.on('finish', (file) => {
console.log(file)
})
```
### gridFile.downloadStream ⇒ GridFSBucketWriteStream
Download a file from GridFS
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: GridFSBucketWriteStream - Download Stream
| Param | Type | Description |
| --- | --- | --- |
| FileStream | Stream | Write stream of file to download into |
**Example**
```js
const fs = require('fs')
const fileStream = fs.createWriteStream('/path/to/file')
const DownloadStream = gridFile.downloadStream(fileStream)
fileStream.on('finish', () => {
console.log('File downloaded successfully')
})
```
### gridFile.upload ⇒ [Promise.<GridFile>](#GridFile)
Upload a file to GridFS
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: [Promise.<GridFile>](#GridFile) - GridFile as a Promise
| Param | Type | Description |
| --- | --- | --- |
| FileStream | Stream | Read stream of file to upload |
| Callback | function | Callback function |
**Example**
```js
const fs = require('fs')
const fileStream = fs.createReadStream('/path/to/file')
const uploadedFile = await gridFile.upload(fileStream)
```
**Example**
```js
// callback
gridFile.upload(filestream, (err, uploadedFile) => {
if(err){
console.error(err)
} else {
console.log(uploadedFile)
}
})
```
### gridFile.download ⇒ Promise.<Void>
Download a file from GridFS
**Kind**: instance property of [GridFile](#GridFile)
**Returns**: Promise.<Void> - Promise
| Param | Type | Description |
| --- | --- | --- |
| FileStream | Stream | Write stream of file to download into |
| Callback | function | Callback function |
**Example**
```js
const fs = require('fs')
const fileStream = fs.createWriteStream('/path/to/file')
await gridFile.download(fileStream)
```
**Example**
```js
// callback
gridFile.download(fileStream, (err){
if(err){
console.error(err)
} else {
console.log('File downloaded successfully')
}
})
```
### GridFile.getBucket ⇒ GridFSBucket
Get the GridFS bucket created from the Mongoose connection
**Kind**: static property of [GridFile](#GridFile)
**Returns**: GridFSBucket - GridFS Bucket
**Example**
```js
const bucket = GridFile.getBucket()
```
### GridFile.findOneAndDelete ⇒ [Promise.<GridFile>](#GridFile)
Delete a file from GridFS using [GridFSBucket#delete](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#delete)
**Kind**: static property of [GridFile](#GridFile)
**Returns**: [Promise.<GridFile>](#GridFile) - Deleted GridFile as a Promise
**Example**
```js
const deletedFile = await GridFile.findOneAndDelete({ filename: 'image.png' })
```
### GridFile.findByIdAndDelete ⇒ [Promise.<GridFile>](#GridFile)
Delete a file from GridFS using [GridFSBucket#delete](https://mongodb.github.io/node-mongodb-native/3.6/api/GridFSBucket.html#delete)
**Kind**: static property of [GridFile](#GridFile)
**Returns**: [Promise.<GridFile>](#GridFile) - Deleted GridFile as a Promise
**Example**
```js
const deletedFile = await GridFile.findByIdAndDelete('some-id')
```