Tags
For asset uploads, we build on top of an open-source standard: https://tus.io/.
To upload, you can use any of the Tus client libraries.
This example requires that the npm module tus-js-client
is installed.
import * as tus from 'tus-js-client';
import { Upload as TusUpload } from 'tus-js-client';
export interface IUpload extends TusUpload {
url: string;
}
export interface IHandleFile {
file: File | Blob | Pick<ReadableStreamDefaultReader, 'read'>;
token: string;
projectId: string;
meta?: any;
endpoint?: string;
mode: string;
}
export const uploadFile = async ({
file,
token,
projectId,
meta = {},
endpoint = 'https://cloud.caisy.io/',
mode = 'document',
}: IHandleFile) => {
const headers = {
'x-caisy-token': token,
'x-caisy-project-id': projectId,
};
return new Promise((resolve, reject) => {
const upload = new tus.Upload(file, {
headers,
endpoint: endpoint + '/upload/',
onError: function(error: Error) {
reject(error);
},
metadata: {
mode,
filename: (file as File).name,
filetype: (file as File).type,
...meta,
},
parallelUploads: 1,
chunkSize: 3 * Math.pow(10, 6),
onSuccess: function() {
const assetUrl = upload.url.replace('/upload/', '/assets/');
resolve(assetUrl);
},
}) as IUpload;
upload.start();
});
};
It's important to note that the project-id and token must be passed as HTTP headers for authorization.
Subscribe to our newsletters
and stay updated
While you subscribe you agree to our Privacy Policy and Terms of Service apply.
Tags