LogoLogo
  • About
  • Installation
  • Update & migration
  • Configuration
    • Hostname
    • TLS / HTTPS
    • Database
    • Logging
    • API Security
    • Storage
      • Disk
      • In-memory
      • S3
    • RTMP
    • SRT
    • FFmpeg
    • Sessions
    • Metrics
    • Router
    • Debug
  • API Swagger-Documentation
  • API Clients
  • Web-Interface
  • Guides
    • Beginner
    • RTMP
    • SRT
    • Filesystems
  • General
    • Prometheus metrics
  • API
    • Login
    • Config
    • Log
    • Filesystem
      • Disk
      • In-memory
      • S3
    • Metrics
    • Sessions
    • Profiling
    • Ping
  • API / FFmpeg
    • Process
      • Command
      • Metadata
      • State
      • Probe
      • Report
    • Skills
    • Widget (Website)
  • API / RTMP
    • RTMP
  • API / SRT
    • SRT
  • Development
    • Architecture
    • Coding
    • Custom Docker images
    • Benchmark
    • Support
Powered by GitBook
On this page

Was this helpful?

Export as PDF
  1. API
  2. Filesystem

In-memory

PreviousDiskNextS3

Last updated 2 years ago

Was this helpful?

A very simple in-memory filesystem is available which is only accessible via HTTP under /memfs. Use the POST or PUT method with the path to that file. The body of the request contains the contents of the file. No particular encoding or Content-Type is required. The file can then be downloaded from the same path.

This filesystem is practical for often changing data (e.g. HLS live stream) in order not to stress the disk or to wear out a flash drive. Also you don't need to setup a RAM drive or similar on your system.

curl http://127.0.0.1:8080/memfs/path/to/a/file.txt -X PUT -d @somefile.txt
curl http://127.0.0.1:8080/memfs/path/to/a/file.txt -o file.txt
curl http://127.0.0.1:8080/memfs/path/to/a/file.txt -X DELETE

The returned Content-Type is based solely on the file extension. For a list of known mime-types and their extensions see in the configuration.

Access protection

It is strongly recommended to enable a username/password (HTTP Basic-Auth) protection for any PUT/POST and DELETE operations on /memfs. GET operations are not protected.

By default HTTP Basic-Auth is enabled with the username "admin" and a random password.

Example:

Use these endpoints to, e.g., store HLS chunks and .m3u8 files (in contrast to an actual disk or a ramdisk):

ffmpeg -f lavfi -re -i testsrc2=size=640x480:rate=25 -c:v libx264 -preset:v ultrafast -r 25 -g 50 -f hls -start_number 0 -hls_time 2 -hls_list_size 6 -hls_flags delete_segments+temp_file+append_list -method PUT -hls_segment_filename http://127.0.0.1:8080/memfs/foobar_%04d.ts -y http://127.0.0.1:8080/memfs/foobar.m3u8

Then you can play it generally with, e.g., ffplay http://127.0.0.1:8080/memfs/foobar.m3u8.

API

Create, Update

Example:

echo 'test' > example.txt && \
curl http://127.0.0.1:8080/api/v3/fs/mem/example.txt \
   -d @example.txt \
   -X PUT
from core_client import Client

client = Client(base_url="http://127.0.0.1:8080")
client.login()

client.v3_fs_put_file(
    name: "mem",
    path: "example.txt",
    data: b"test"
)
import (
    "strings"
    "github.com/datarhei/core-client-go/v16"
)

client, _ := coreclient.New(coreclient.Config{
    Address: "https://127.0.0.1:8080",
})

data := strings.NewReader("test")
err := client.FilesystemAddFile("mem", "/example.txt", data)

The contents for the upload has to be provided as an io.Reader.

After the successful upload the file is available at /memfs/example.txt and /api/v3/fs/mem/example.txt.

Description:

Read

List all files

Listing all currently stored files is done by calling /api/v3/fs/mem. It also accepts the query parameters pattern, sort (name, size, or lastmod) and order (asc or desc). If none of the parameters are given, all files will be listed sorted by their last modification time in ascending order.

Example:

curl "http://127.0.0.1:8080/api/v3/fs/mem?sort=name&order=asc" \
   -X GET
from core_client import Client

client = Client(base_url="http://127.0.0.1:8080")
client.login()

core_memfs_list = client.v3_fs_get_file_list(name="mem")
print(core_memfs_list)
import (
    "fmt"
    "github.com/datarhei/core-client-go/v16"
)

client, _ := coreclient.New(coreclient.Config{
    Address: "https://127.0.0.1:8080",
})

files, err := client.FilesystemList("mem", "/*.", coreclient.SORT_NAME, coreclient.ORDER_ASC)

for _, file := range files {
    fmt.Printf("%+v\n", file)
}

Description:

Download a file

For downloading a file you have to specify the complete path and filename. The Content-Type will always be application/data.

Example:

curl http://127.0.0.1:8080/api/v3/fs/mem/example.txt \
   -X GET
from core_client import Client

client = Client(base_url="http://127.0.0.1:8080")
client.login()

core_memfs_file = client.v3_fs_get_file(
    name="mem",
    path="example.txt"
)
print(core_memfs_file)
import (
    "github.com/datarhei/core-client-go/v16"
)

client, _ := coreclient.New(coreclient.Config{
    Address: "https://127.0.0.1:8080",
})

data, err := client.FilesystemGetFile("mem", "/example.txt")
defer data.Close()

The returned data is an io.ReadCloser.

Description:

Link

Linking a file will return a redirect to the linked file. The target of the redirect has to be in the body of the request.

Example:

curl http://127.0.0.1:8080/api/v3/fs/mem/example2.txt \
   -d 'example.txt'
   -X PATCH
Missed.

This is not implemented in the client.

Description:

Delete

For deleting a file you have to specify the complete path and filename.

Example:

curl http://127.0.0.1:8080/api/v3/fs/mem/example.txt \
   -X DELETE
from core_client import Client

client = Client(base_url="http://127.0.0.1:8080")
client.login()

client.v3_fs_delete_file(
    name="mem",
    path="example.txt"
)
import (
    "github.com/datarhei/core-client-go/v16"
)

client, _ := coreclient.New(coreclient.Config{
    Address: "https://127.0.0.1:8080",
})

err := client.FilesystemDeleteFile("mem", "/example.txt")

Description:

Configuration

The contents of the /memfs are also accessible via the API in the same way as described above, but with the same protection as the API (see ) for all operations. It is also possible to list all files that are currently in the filesystem.

With the pattern parameter you can filter the list based on a , with the addition of the ** placeholder to include multiple subdirectories, e.g. listing all .ts file in the root directory has the pattern /*.ts, listing all .ts file in the whole filesystem has the pattern /**.ts.

glob pattern
In-memory
In-memory
storage.mime_types

Fetch a file from the memory filesystem

get

Fetch a file from the memory filesystem

Path parameters
pathstringRequired

Path to file

Responses
200
OK
Responsestring
301
Moved Permanently
404
Not Found
get
GET /{path} HTTP/1.1
Host: memfs
Accept: */*
text

Remove a file from the memory filesystem

delete

Remove a file from the memory filesystem

Authorizations
Path parameters
pathstringRequired

Path to file

Responses
200
OK
text/plain
Responsestring
404
Not Found
text/plain
delete
DELETE /{path} HTTP/1.1
Host: memfs
Authorization: Basic username:password
Accept: */*
text

List all files on the memory filesystem

get

List all files on the memory filesystem. The listing can be ordered by name, size, or date of last modification in ascending or descending order.

Authorizations
Query parameters
globstringOptional

glob pattern for file names

sortstringOptional

none, name, size, lastmod

orderstringOptional

asc, desc

Responses
200
OK
application/json
get
GET /v3/fs/mem HTTP/1.1
Host: api
Authorization: YOUR_API_KEY
Accept: */*
200

OK

[
  {
    "last_modified": 1,
    "name": "text",
    "size_bytes": 1
  }
]

Fetch a file from the memory filesystem

get

Fetch a file from the memory filesystem

Authorizations
Path parameters
pathstringRequired

Path to file

Responses
200
OK
Responsestring
301
Moved Permanently
404
Not Found
get
GET /v3/fs/mem/{path} HTTP/1.1
Host: api
Authorization: YOUR_API_KEY
Accept: */*
text

Remove a file from the memory filesystem

delete

Remove a file from the memory filesystem

Authorizations
Path parameters
pathstringRequired

Path to file

Responses
200
OK
text/plain
Responsestring
404
Not Found
text/plain
delete
DELETE /v3/fs/mem/{path} HTTP/1.1
Host: api
Authorization: YOUR_API_KEY
Accept: */*
text
  • Access protection
  • GETFetch a file from the memory filesystem
  • PUTAdd a file to the memory filesystem
  • DELETERemove a file from the memory filesystem
  • Example:
  • API
  • Create, Update
  • PUTAdd a file to the memory filesystem
  • Read
  • GETList all files on the memory filesystem
  • GETFetch a file from the memory filesystem
  • Link
  • PATCHCreate a link to a file in the memory filesystem
  • Delete
  • DELETERemove a file from the memory filesystem
  • Configuration

Add a file to the memory filesystem

put

Writes or overwrites a file on the memory filesystem

Authorizations
Path parameters
pathstringRequired

Path to file

Body
integer[]Optional
Responses
201
Created
Responsestring
204
No Content
507
Insufficient Storage
put
PUT /{path} HTTP/1.1
Host: memfs
Authorization: Basic username:password
Content-Type: application/data
Accept: */*
Content-Length: 3

[
  1
]
text

Add a file to the memory filesystem

put

Writes or overwrites a file on the memory filesystem

Authorizations
Path parameters
pathstringRequired

Path to file

Body
integer[]Optional
Responses
201
Created
Responsestring
204
No Content
507
Insufficient Storage
put
PUT /v3/fs/mem/{path} HTTP/1.1
Host: api
Authorization: YOUR_API_KEY
Content-Type: application/data
Accept: */*
Content-Length: 3

[
  1
]
text

Create a link to a file in the memory filesystem

patch

Create a link to a file in the memory filesystem. The file linked to has to exist.

Authorizations
Path parameters
pathstringRequired

Path to file

Body
stringOptional
Responses
201
Created
Responsestring
400
Bad Request
patch
PATCH /v3/fs/mem/{path} HTTP/1.1
Host: api
Authorization: YOUR_API_KEY
Content-Type: application/data
Accept: */*
Content-Length: 6

"text"
text
API-Security configuration