In this article, you will learn how to upload large files to DocSpace using our API Backend.
To upload files with size greater than 10 Mb (10 485 760 bytes), you need to create a session by sending the POST request to the following endpoint:
POST api/2.0/files/{folderid}/upload/create_session
The minimum data that the request body must contain:
{ "CreateOn": "2024-01-01T12:00:00.600Z", "FileName": "name.docx", "FileSize": 15728640, "folderId": 12345 }
An object with the information about the created session will be returned in the response:
{ "success": true, "data": { "bytes_total": 15728640, "bytes_uploaded": 0, "created": "2024-01-01T12:00:00.600Z", "expired": "2024-01-01T12:00:00.600Z", "id": "00000000000000000000000000000000", "location": "https://example.onlyoffice.io/ChunkedUploader.ashx?uid=00000000000000000000000000000000", "path": [12345] } }
The location parameter contain URL which will be used to upload the file chunks.
Split the file into chunks. Each chunk must be equal to or less than 10 MB (1010241024 bytes), and multiples of 512 bytes. Use the resulting URLs to upload the chunks.
Known issues
Please pay attention to the following details:
The request body must contain the FormData object.
The "Content-type": "multipart/form-data" header type specifies that the request body contains the data in the multipart format.
After the last chunk is uploaded, the server returns an object in the following format:
{ "file": {},, "folderId": 12345, "id": 123456, "title": "demo.docx", "uploaded": true, "version": 1 }
Below you can see an example in Node.js:
const fileResponse = await fetch("url_to_file") const data = await fileResponse.arrayBuffer() const size = fileResponse.headers.get("content-length") const chunkUploadSize = 1024 * 1023 const folderId = "your_folder_id" const body = { "CreateOn": new Date().toISOString(), "FileName": "file_name", "FileSize": size, "folderId": folderId } const url = `https://example.onlyoffice.com/api/2.0/files/${folderId}/upload/create_session` const sessionResponse = await fetch(url, { "body": JSON.stringify(body), "headers": { "Content-Type": "application/json" }, "method": "POST" }) const session = await sessionResponse.json() const requestsDataArray = [] const chunks = Math.ceil(size / chunkUploadSize) let chunk = 0 while (chunk < chunks) { const offset = chunk * chunkUploadSize const formData = new FormData() formData.append("file", new Blob([data.slice(offset, offset + chunkUploadSize)])) requestsDataArray.push(formData) chunk = chunk + 1 } let result for (let i = 0; i < requestsDataArray.length; i = i + 1) { const formData = requestsDataArray[i] const headers = { ...formData.getHeaders(), "Content-Type": "multipart/form-data" }; result = await fetch(session.data.location, { "body": formData, "headers": headers, "method": "POST" }) }