Hestia is a simple file manipulation service, it allows you to upload, download, delete and list files via a REST API.
This project intends to be a reliable and simple solution for small scale file manipulation and avoid the need to setup a full fledged cloud storage service.
- Inter-server communication, since it's an api key based authentication, the key should be kept secret and not exposed to the client side.
- It is intended to be used with small/constrained file sizes, the file you'll try to manipulate will be loaded into memory and then sent to the server. For large files, it's recommended to use a more robust solution like AWS S3, Google Cloud Storage or Azure Blob Storage.
To run this project, you will need to add the following environment variables:
API_KEY
, a random secret key that will be used to authenticate the requests.BASE_DIRECTORY
, the base directory where the files will be stored.
All requests must have the Authorization
header with the value of a one-time-token generated by the server.
Since the API key is a secret, it should not be exposed to the client side, so the server will generate a one-time-token that will be used to authenticate the requests.
Generates a one-time-token that will be used to authenticate the requests.
Name | Type | Description |
---|---|---|
fileName |
string |
The name of the file that will be manipulated. |
path |
string |
The path of the file that will be manipulated. |
Name | Type | Description |
---|---|---|
Authorization |
string |
The API key. |
Content-Type |
string |
application/json . |
Accept |
string |
application/json . |
```json
{
"token": "...",
}
```
⚠️ Token expiration time: 5 minutes.
Uploads a file to the server.
Name | Type | Description |
---|---|---|
Authorization |
string |
The one-time-token. |
Content-Type |
string |
application/json . |
Accept |
string |
application/json . |
```json
{
"fileName": "example.txt",
"path": "/",
"file": "base64-encoded-file"
}
```
Downloads a file from the server.
Name | Type | Description |
---|---|---|
fileName |
string |
The name of the file that will be downloaded. |
path |
string |
The path of the file that will be downloaded. |
Name | Type | Description |
---|---|---|
Authorization |
string |
The one-time-token. |
Content-Type |
string |
application/json . |
Accept |
string |
application/json or application/octet-stream |
If the Accept
header is application/json
:
```json
{
"fileName": "example.txt",
"path": "/",
"file": "base64-encoded-file"
}
```
If the Accept
header is application/octet-stream
: stream the file.
Downloads a file from the server, usually used to embed the file in an <img>
, <audio>
, <video>
or <iframe>
tag.
Name | Type | Description |
---|---|---|
fileName |
string |
The name of the file that will be downloaded. |
path |
string |
The path of the file that will be downloaded. |
token |
string |
The one-time-token. |
download |
string |
Download filename (via Content-Disposition ) |
Deletes a file from the server.
Name | Type | Description |
---|---|---|
fileName |
string |
The name of the file that will be deleted. |
path |
string |
The path of the file that will be deleted. |
recursive |
boolean |
If true , deletes all files in the path. |
path
is required, but fileName
is optional. If fileName
is not provided, it'll try to delete the whole path specified in path
recursive
is optional, if true
, it'll delete recursively all files in the path. (even nested directories)
Name | Type | Description |
---|---|---|
Authorization |
string |
The one-time-token. |
Content-Type |
string |
application/json . |
Accept |
string |
application/json . |