Загрузка файла Flowjs - Ionic и ngCordova

Я пытаюсь загрузить изображение из моего приложения на сервер, я хотел использовать плагин для передачи файлов ngCordova, но меня не устраивает информация о прогрессе, которую дает этот плагин, поэтому я решил пойти с Flowjs, но я не удается создать правильный объект файла HTML5 из ​​URL-адреса файла, который у меня есть. Это мой код

window.resolveLocalFileSystemURL(photo, function(fileEntry){
    fileEntry.file(function(file){
        $scope.flow.addFile(file);
        $scope.flow.upload();
        $scope.flow.on('fileProgress', function (file, chunk){
            console.log(file);
            console.log(chunk);
        });
        $scope.flow.on('error', function(a,b){
            console.log(a);
            console.log(b);
        });
    });
    }, function(err){
        console.log(err);
});

Где фотография - это путь к файловой системе для файла. Я получаю ошибку 400(неверный запрос), когда я пытаюсь выполнить эту загрузку, я уверен, что серверная часть верна, потому что я использую ее со многими другими приложениями Flowjs. Я думаю, что объект, возвращаемый функцией fileEntry.file(), не является правильным файловым объектом HTML5, возможно, создание BLOB-объекта из URL-адреса файла может решить проблему, но я не понимаю, как его создать. Я хотел бы, чтобы мой код работал, прежде чем пытаться создать Blob, но если это единственное решение, хорошо...

1 ответ

Решение

Хорошо, я нашел решение, которое работает, не знаю, будет ли это наилучшим вариантом, и любые улучшения приветствуются.

window.resolveLocalFileSystemURL(photo, function(fileEntry){
    fileEntry.file(function(file){
        var reader = new FileReader();
        reader.onload = function(){
            var blob = new Blob([reader.result], {type: 'application/octet-stream'});
            blob.name = 'image.jpg';
            $scope.flow.addFile(blob);
            $scope.flow.upload();
            $scope.flow.on('fileProgress', function (file, chunk){
                console.log(file);
                console.log(chunk);
            });
            $scope.flow.on('error', function(a,b){
                console.log(a);
                console.log(b);
            });
        };
        reader.readAsArrayBuffer(file);
    });
}, function(err){
    console.log(err);
});
Другие вопросы по тегам