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"'
}
})
}