Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/stephentuso/parse-server-multi-files-adapter
Allows multiple adapters to be used at the same time
https://github.com/stephentuso/parse-server-multi-files-adapter
Last synced: 8 days ago
JSON representation
Allows multiple adapters to be used at the same time
- Host: GitHub
- URL: https://github.com/stephentuso/parse-server-multi-files-adapter
- Owner: stephentuso
- License: mit
- Created: 2017-07-30T16:10:11.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2018-03-14T04:20:29.000Z (over 6 years ago)
- Last Synced: 2023-08-24T05:51:21.367Z (about 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 21.5 KB
- Stars: 4
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# parse-server-multi-files-adapter [![npm version](https://img.shields.io/npm/v/parse-server-multi-files-adapter.svg?style=flat)](https://www.npmjs.com/package/parse-server-multi-files-adapter)
Allows multiple file adapters to be used at the same time by specifying the adapter in the filename.
## Installation
```bash
yarn add parse-server-multi-files-adapter
```
or
```bash
npm install --save parse-server-multi-files-adapter
```## Usage
### Server
For now, must be passed as an instance to the parse-server constructor:
```javascript
const MultiFilesAdapter = require('parse-server-multi-files-adapter')
const FSFilesAdapter = require('parse-server-fs-adapter')
const S3Adapter = require('parse-server-s3-adapter')
const GCSAdapter = require('parse-server-gcs-adapter')const multiAdapter = new MultiFilesAdapter({
// Delimiter used to retrieve adapter key
// Changing this will break all files that were previously saved
id: 'unique',
// Dictionary of file adapters
adapters: {
local: new FSFilesAdapter(),
s3: new S3Adapter({
// options...
}),
gcs1: new GCSAdapter({
// options...
}),
gcs2: new GCSAdapter({
// options...
})
},
// The key of the file adapter to use if none specified
// Chainging this will break previously saved files that don't have an adapter key
defaultAdapter: 's3'
})const api = new ParseServer({
appId: 'app_id',
masterKey: 'master_key',
filesAdapter: multiAdapter
})
```### Client
The adapter key (corresponding to a key in the `adapters` object above) must be embedded in the filename.
This uses [subsume-limited](https://github.com/stephentuso/subsume-limited) to parse the filename and determine the adapter key.
If writing a JS app you could do something like this to help create files:```javascript
// Utils
const Subsume = require('subsume-limited')const subsume = new Subsume('unique') // same id that was passed to constructor on server
function composeFileName (adapterKey, filename) {
return subsume.compose(adapterKey) + filename
}function getOriginalFileName (filename) {
return subsume.parse(filename).rest
}function createParseFile (adapterKey, filename, data, type) {
return new Parse.File(composeFileName(adapterKey, filename), data, type)
}// Usage
const file = createParseFile('local', 'foobar.txt', { base64: "TG9yZW0gSXBzdW0gRG9sb3I=" })file.save()
.then(function () {
const foo = new Parse.Object('Foo')
foo.set('file', file)
return foo.save()
})
.then(function () {
console.log('Saved')
})
```The saved file name in the example above would be `Qq-unique-qQlocalZz-unique-zZfoobar.txt`.
If not using JS, you can replicate that functionality:```
ID = Delimiter you chose
AdapterKey = Key of adapter to use
prefix = "Qq-" + ID + "-qQ"
suffix = "Zz-" + ID + "-zZ"
composed = prefix + AdapterKey + suffix
filename = composed + original file name
```