Uppy-server is a server integration for Uppy file uploader.
It handles the server-to-server communication between your server and file storage providers such as Google Drive, Dropbox, Instagram, etc.
As of now uppy-server is integrated to work with:
- Google Drive
- Dropbox
- Local disk
npm install uppy-server
Once uppy-server is insatlled you need to set the following environment variables
export UPPY_ENDPOINT="YOUR UPPY CLIENT URL"
export UPPYSERVER_DOMAIN="YOUR SERVER DOMAIN"
export UPPYSERVER_PROTOCOL="YOUR SERVER PROTOCOL"
# If used with Dropbox
export UPPYSERVER_DROPBOX_KEY="YOUR DROPBOX KEY"
export UPPYSERVER_DROPBOX_SECRET="YOUR DROPBOX SECRET"
# If used with Google Drive
export UPPYSERVER_GOOGLE_KEY="YOUR GOOGLE KEY"
export UPPYSERVER_GOOGLE_SECRET="YOUR GOOGLE SECRET"
# If used with Instagram Drive
export UPPYSERVER_INSTAGRAM_KEY="YOUR INSTAGRAM KEY"
export UPPYSERVER_INSTAGRAM_SECRET="YOUR INSTAGRAM SECRET"
If you want to store uploads on your server's local disk, please set the following env variable as well
export UPPYSERVER_DATADIR="PATH/TO/UPLOAD/DIRECTORY "
Please ensure that the required env varaibles are set before runnning/using uppy-server. See.
var express = require('express')
var bodyParser = require('body-parser')
var uppy = require('uppy-server')
var app = express()
app.use(bodyParser.json())
...
// be sure to place this anywhere after app.use(bodyParser.json())
app.use(uppy.app())
To enable uppy socket for realtime feed to the client while upload is going on, you call the socket
method like so.
...
var server = app.listen(PORT)
uppy.socket(server)
node .node_modules/uppy-server/lib/start-standalone.js
If you cloned the repo from gtihub and want to run it as a standalone server, you may also run the following command from within its directory
npm run start:production
As of now, uppy-server supports both Google Drive and Dropbox out of the box, but you may also
choose to add your custom providers. You can do this by passing the customPrivders
option
when calling the uppy app
method.
let options = {
customProviders: {
myprovidername: {
config: {
authorize_url: "https://mywebsite.com/authorize",
access_url: "https://mywebsite.com/token",
oauth: 2,
key: "[CLIENT_ID]",
secret: "[CLIENT_SECRET]",
scope: ["read", "write"]
},
module: require('/path/to/provider/module')
}
}
}
uppy.app(options)
The customProviders
option should be an object containing each custom provider.
Each custom provider would in turn be an object with two keys, config
and module
. The config
option would contain Oauth API settings, while the module
would point to the provider module.
- To setup uppy-server for local development, please clone the repo and install like so:
git clone https://github.com/transloadit/uppy-server && cd upppy-server && npm install
- Configure your enviorment variables by copying the
env.example.sh
file toenv.sh
and edit it to its correct values.
cp env.example.sh env.sh
$EDITOR env.sh
- To start the server simply run:
npm run start
This would get the uppy-server running on http://localhost:3020
.
It also expects the uppy client to be running on http://localhost:3452
An example server is running at http://server.uppy.io, which is deployed via Frey, using the following Freyfile.
All the secrets are stored in env.infra.sh
, so using env.infra.example.sh
, you could
use the same Freyfile but target a different cloud vendor with different secrets, and run your own
uppy-server.
Requires Frey, if you haven't set it up yet type
npm run install:frey
afterwards, production logs are available through:
npm run logtail
This requires at least the FREY_ENCRYPTION_SECRET
key present in your ./env.sh
.