Skip to main content

File Operations

Working with files and resources in Solid Pods.

Reading Resources​

Fetch a Turtle file​

import { store, sym } from 'solid-logic'

async function readResource(uri) {
const resource = sym(uri)
await store.fetcher.load(resource)

// Resource is now in the store
const statements = store.match(null, null, null, resource)
return statements
}

Fetch raw content​

async function fetchRaw(uri) {
const response = await store.fetcher.webOperation('GET', uri)
return response.text()
}

Writing Resources​

Create a new resource​

import { store, sym, lit, st } from 'solid-logic'

async function createResource(containerUri, filename, content) {
const resourceUri = containerUri + filename
const resource = sym(resourceUri)

// Add statements
const statements = [
st(resource, RDF('type'), SCHEMA('Article'), resource),
st(resource, SCHEMA('name'), lit('My Article'), resource)
]

await store.updater.put(resource, statements, 'text/turtle')
}

Update existing resource​

async function updateResource(uri, deletions, insertions) {
await store.updater.update(deletions, insertions)
}

Uploading Files​

Upload binary file​

async function uploadFile(containerUri, file) {
const uri = containerUri + file.name
await store.fetcher.webOperation('PUT', uri, {
body: file,
contentType: file.type
})
}

Upload with drag and drop​

dropzone.addEventListener('drop', async (e) => {
e.preventDefault()
const files = e.dataTransfer.files

for (const file of files) {
await uploadFile(currentFolder, file)
}
})

Deleting Resources​

async function deleteResource(uri) {
await store.fetcher.webOperation('DELETE', uri)
}

Creating Containers​

async function createFolder(parentUri, name) {
const folderUri = parentUri + name + '/'
await store.fetcher.webOperation('PUT', folderUri, {
headers: {
'Content-Type': 'text/turtle',
'Link': '<http://www.w3.org/ns/ldp#BasicContainer>; rel="type"'
}
})
}

See Also​