Home Reference Source Repository

src/util/sp/uploadFile.js

import readFileToString from '../readFileToString';
import respToJson from '../respToJson';

/**
 * Upload file to project Documents
 *
 * @param {File} file File object from upload.
 * @param {string} filename Wanted file name. Default file.name.
 * @return {Promise}
 */
export default function uploadFile(file, filename) {
    filename = filename || file.name;

    const siteurl = window._spPageContextInfo.webServerRelativeUrl;
    const urlTemplate = `${siteurl}/_api/web/lists/getByTitle('Documents')/RootFolder/Files/add(url='${filename}',overwrite='true')`;
    const requestDigest = document.getElementById('__REQUESTDIGEST');

    return readFileToString(file)
    .then((filedata) => {
        return fetch(urlTemplate, {
            credentials: 'same-origin',
            method: 'POST',
            headers: {
                'Accept': 'application/json;odata=verbose',
                'Content-Type': 'application/json;odata=verbose',
                'Content-Length': filedata.length,
                'X-RequestDigest': requestDigest && requestDigest.value || '',
                'binaryStringRequestBody': 'true',
            },
            body: filedata,
        });
    })
    .then(respToJson);
}