File API
The File API enables your application to access and manage folders and files. The API is automatically available from the inside of any Codehook function.
Install
Run npm install codehooks-js
in your project code folder.
Use the CLI command coho upload to upload files from a local machine to the application.
API quick overview
readFile(path)
Read file content as text from the file system.
Parameters
- path: full path to file, e.g. '/documents/doc.html'
Returns: Promise with text content from file.
Error: throws exception if file is not found.
Code example for reading a file
import {app, filestore} from 'codehooks-js'
// get a file text content
app.get('/txt', async (req, res) => {
try {
const file = await filestore.readFile('/somefolder/myfile.txt');
res.set('content-type', 'text/plain')
res.end(file)
} catch (error) {
res.status(404).end('No file here')
}
})
// bind to serverless runtime
export default app.init();
getReadStream(path)
Read file content as a binary stream the file system.
Parameters
- path: full path to file, e.g.
/private/dummy.pdf
Returns: Promise with file stream handle.
Error: throws exception if file is not found.
Code example for reading a binary file stream
import {app, filestore} from 'codehooks-js'
// get a file binary content as stream
app.get('/pdf', async (req, res) => {
try {
const filestream = await filestore.getReadStream('/private/dummy.pdf');
res.set('content-type', 'application/pdf');
// stream content back to client
filestream
.on('data', (buf) => {
res.write(buf, 'buffer')
})
.on('end', () => {
res.end()
})
} catch (error) {
console.error(error)
res.status(404).end('No file here')
}
})
// bind to serverless runtime
export default app.init();
saveFile(path, filestream)
Write a file binary stream to the file system.
Parameters
- path: full path to file, e.g.
/private/dummy.pdf
- filestream: inputstream of binary buffers
Returns: Promise with upload result text.
Error: throws exception if an error occured.
Code example for writing a binary inputstream as a new file to the file system
import {app, filestore} from 'codehooks-js'
import {PassThrough} from 'stream';
// post a file binary content
app.post('/file', async (req, res) => {
try {
const {name} = req.query; /* e.g. /dev/file?name=/upload/dummy.pdf */
const stream = new PassThrough();
req.pipe(stream);
const result = await filestore.saveFile(name, stream);
res.end(result)
} catch (error) {
console.error(error)
res.status(404).end('Upload error')
}
})
// bind to serverless runtime
export default app.init();
deleteFile(path)
Delete a file binary from the file system.
Parameters
- path: full path to file, e.g.
/private/dummy.pdf
Returns: Promise with delete result text.
Error: throws exception if an error occured.
Code example for deleting a file from the file system
import {app, filestore} from 'codehooks-js'
// delete a file
app.delete('/file', async (req, res) => {
try {
const {name} = req.query;
const result = await filestore.deleteFile(name);
res.end(result)
} catch (error) {
console.error(error)
res.status(404).end('Not found')
}
})
// bind to serverless runtime
export default app.init();
list(path)
List files in folders from the file system.
Parameters
- path: full path to folder, e.g.
/upload
Returns: Promise with JSON array of files matching path to folder.
Error: throws exception if an error occured.
Code example for listing files in a folder from the file system
import {app, filestore} from 'codehooks-js'
// list dir
app.get('/list', async (req, res) => {
try {
const result = await filestore.list('/');
res.end(result)
} catch (error) {
console.error(error.message)
res.status(400).end('sorry list')
}
})
// bind to serverless runtime
export default app.init();
Example output shows folders and files:
[
{"path":"/robots.txt","size":114,"date":"2023-09-29T12:12:10.000Z","_id":"6516f3b26c816e0015ca7b60"},
{"path":"/upload/dummy.pdf","size":1234,"date":"2023-09-29T16:22:10.499Z","_id":"6516f9b26c816e0015ce7b6d"},
{"path":"/upload/logo.pdf","size":259096,"date":"2023-09-30T11:48:18.003Z","_id":"6517155cd8c8a40071d6bc79"},
{"path":"/upload/report.html","size":1320,"date":"2023-09-30T12:46:31.640Z","_id":"65180b50d8fc2b01b3b2515e"}
]
readFileAsBuffer(path)
Read file content into a Buffer.
Parameters
- path: full path to folder, e.g.
/upload
Returns: Promise with Buffer.
Error: throws exception if an error occured.
Code example for reading file content into a Buffer
// collapsed code
const buf = await filestore.readFileAsBuffer('/images/logo.png');
console.log(buf.length);