Задать вопрос
  • Загрузка файла на Яндекс Диск REST API?

    @Denis_Lebedinsky Автор вопроса
    Проблема решена, я передавал base64, а нужно передавать blob
    вот функция запроса и преобразования в blob. file - это данные из Filereader (reader.result)
    export const upload_file_api = (url, file) => {
        const parts = file.split(',');
        const typep = parts[0];
        const base64Data = parts[1];
        const type = typep.split(';')[0].split(':')[1];
        const blobfile = b64toBlob(base64Data, type);
    
        delete axios.defaults.headers.common['Authorization'];
        axios.defaults.headers.common['Content-Type'] = 'application/octet-stream';
        return axios.put(url, blobfile)
            .then(res => res.status)
            .catch(error => {
                throw error
            });
    };
    
    function b64toBlob(b64Data, contentType, sliceSize) {
        contentType = contentType || '';
        sliceSize = sliceSize || 512;
    
        var byteCharacters = atob(b64Data);
        var byteArrays = [];
    
        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
            var slice = byteCharacters.slice(offset, offset + sliceSize);
    
            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }
    
            var byteArray = new Uint8Array(byteNumbers);
    
            byteArrays.push(byteArray);
        }
    
        var blob = new Blob(byteArrays, {type: contentType});
        return blob;
    }
    Ответ написан
    Комментировать