Public | Automated Build

Last pushed: 3 months ago
Short Description
Storage api server
Full Description

Storage api

Content-addressable storage api for files.

Client and Server for file storage.

Client

const Client = require('@rapidimages/storage-api-client')

Client(url)

url base url to storage api

Returns an instance of client.

methods

client.upload(files, [options])

files in array of either file streams in node, or a file list from a input type file / drag drop.

options.onUploadProgress({ percentage, total, loaded, totalMB, uploadedMB, file })

options.onHashProgress({ file, total, loaded, percentage})

options.onRequest(request)

options.onUnknown(unknown) contains object of files that will be uploaded to api

Usage

  Client('url')
  .upload([files])
  .then((manifestKey) => {
    // a hash to the manifest of this upload containing all file keys
  })

All files are hashed using sha1 both in the browser and node.

Each upload will create a manifest in the following format

{
  "files": [
    {
      "size": 697,
      "name": "filepath",
      "key": "0d5061684f1d3c8262bfdefe5c373131a6358aba"
    }
  ]
}

All files including the manifest are served using http /get/key

Browser / Node

The client is available for both node and the browser.

Upload

Files that are known by the server will not be uploaded again :) this is thanks to sha1 hashing.

Usage

STORAGE_PATH=x LOG_PRETTY=1 PORT=5000 npm start

http get /get/key.type

.type is optional will either return content or 404 if not found.

http post /get/unknown

body contains an array of hashes

Will return an array of unknown hashes.

http post multipart /get/upload

Will return a string which will be the sha1 hash of the manifest.

Running Server in docker

ᐅ docker pull rapidimages/storage-api:version
ᐅ docker run --rm --name storage-api -p 5000:5000 rapidimages/storage-api:version

This is the recommended way of running the server behind a reverse proxy like traefik.

license

Apache License, Version 2.0

Docker Pull Command
Owner
rapidimages
Source Repository

Comments (0)