diff --git a/README.md b/README.md index 68f9bd1..d39c5a8 100644 --- a/README.md +++ b/README.md @@ -1 +1,83 @@ -# storage-upload \ No newline at end of file +# storage-upload + +Docker micro service for uploading files to a storage server. + +# Usage + +storage-upload listens on port 4020 by default. Since the storage upload needs a place to store the uploaded files, it's important to map the `/app/public` folder to either locally or some volume. + +In addition it's recommended to also map the config file `/app/config/config.production.json` which should include a list of accepted sites and the corresponding json web token secret. + +```bash +docker run -d \ + --name storage-upload \ + -v /path/to/store/files:/app/public \ + -v /path/to/config/file.json:/app/config/config.production.json \ + -p 4000:4020 + nfpis/storage-upload +``` + +### Config + +The config file should look something like this: + +`config.production.json` +```json +{ + "sites": { + "site1": "site1-secret", + "site2": "site2-secret" + } +} +``` + +The server checks the token in the query for supported site name and then verifies the secret match. To generate a token valid to upload to `site2` above, you can run something like this: + +```node +const jwt = require('jsonwebtoken') + +let token = jwt.sign({ site: 'site2' }, 'site2-secret') +// eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlIjoic2l0ZTIifQ.Ovz7fnTMzaWOLOhnbkMtqHPk20EVqhCD8WDsLKk_Wv0 +``` + +*Hint: Post the above token to https://jwt.io/ and check it out.* + +Using the above token would save the requested file under `/app/public/site2/` folder + +# API + +## Media + +Uploading or removing uploaded files on the storage server. + +* **URL** + + /media + +* **Method:** + + `POST` + +* **URL Params** + + `token=[json-web-token]` + +* **Data Params** + + `file=@my-file-to-upload.jpg` + +* **Success Response:** + + * **Code:** 200
+ **Content:** `{ filename: '20171210_115632_my-file-to-upload.jpg', path: '/development/20171210_115632_my-file-to-upload.jpg' }` + +* **Error Response:** + + * **Code:** 422 UNPROCESSABLE ENTRY
+ **Content:** `{ status:422, message: "error message here" }` + +* **Sample Call:** + + ```bash + curl -X POST -F "file=@test.png" http://localhost:4000/media\?token\=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzaXRlIjoidGVzdCJ9.2LAuYwb1bwiMPUWD3gNJKwt9PwLgctleLhYd6sc0FCU + ```