Загрузка проблемы с BLOB-объектами JavaScript

Я пытаюсь записать видео (уже работающее) с использованием HTML5-тега видео "getUserMedia" для доступа к камере устройства и API MediaRecorder для захвата кадров и Angular1 для обработки загрузки файлов. Теперь у меня возникают проблемы с загрузкой Blob на мой PHP-сервер, который работает на Laravel, в настоящее время у меня есть 2 способа загрузить видео, во-первых, это "ng-click", это работает нормально, но когда я программно загружаю Blob, используя тот же Функция, которая запускается "ng-click", похоже, нарушает mimeType моего BLOB-объекта. Вот как выглядит мой код.

$scope.uploader = function() {
    let fData = new FormData();
    let blob = new Blob($scope.chunk, { type: 'video/webm' }); 
    fData.append('vid', blob)
    $http.post(url, fData, {
      transformRequest: angular.identity,
      headers: {'Content-Type': undefined},
    }, success, error)
})

$timeout(function() {
   $scope.uploader();
}, 10000)

Эта проблема здесь, когда "$scope.uploader()" вызывается с использованием "ng-click", он работает нормально, но при вызове метода "uploader" с использованием "$timeout" кажется, что mimeType меняется на "application/octet" поток ", который вызывает проблему.

2 ответа

Здравствуйте, попробуйте этот код,

function base64ToBlob(base64Data, contentType) {
   contentType = contentType || '';
   var sliceSize = 1024;
   var byteCharacters = atob(base64Data);
   var bytesLength = byteCharacters.length;
   var slicesCount = Math.ceil(bytesLength / sliceSize);
   var byteArrays = new Array(slicesCount);
   for (var sliceIndex = 0;sliceIndex <slicesCount;++sliceIndex) {
      var begin = sliceIndex * sliceSize;
      var end = Math.min(begin + sliceSize, bytesLength);
      var bytes = new Array(end - begin);
      for (var offset = begin, i = 0;offset <end;++i, ++offset) {
        bytes[i] = byteCharacters[offset].charCodeAt(0);
      }
      byteArrays[sliceIndex] = new Uint8Array(bytes);
   }
   return new Blob(byteArrays, {
    type: contentType});
}

Определить сферу

$scope.onFile = function(blob) {
    Cropper.encode((file = blob)).then(function(dataUrl) {
    $scope.dataUrl = dataUrl;
    $scope.odataUrl = dataUrl;
    $timeout(showCropper);  // wait for $digest to set image's src
   });
};

Отправить метод

 $scope.uploadImage = function () {

                if ($scope.myCroppedImage === '')
                {

                }
                $scope.msgtype = "";
                $scope.msgtxt = "";
                var fd = new FormData();
                var imgBlob = dataURItoBlob($scope.myCroppedImage);
                fd.append('clogo', imgBlob);
                fd.append('actionfile', 'editimage');
                $http.post(
                        '../user/user_EditCompany.php',
                        fd, {
                            transformRequest: angular.identity,
                            headers: {
                                'Content-Type': undefined
                            }
                        }
                )
                        .success(function (response) {
                            // console.log(response);
                            if (response.status == 'success')
                            {
                          //your code
                     }else{ 
                         //your code
                     }
                     })
                        .error(function (response) {
                            console.log('error', response);
                        });
            };

          function dataURItoBlob(dataURI) {
                var binary = atob(dataURI.split(',')[1]);
                var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
                var array = [];
                for (var i = 0; i < binary.length; i++) {
                    array.push(binary.charCodeAt(i));
                }
                return new Blob([new Uint8Array(array)], {
                    type: mimeString
                });
            }

Спасибо, проблема была вызвана ограничением загрузки и публикации в моем php.ini.

Другие вопросы по тегам