Cordova android URL.createObjectURL (blob) не работает - PullRequest
0 голосов
/ 20 марта 2020

Я создаю приложение Cordova, и мне нужно извлечь BLOB-объект из файла изображения и использовать его в качестве sr c тега img. Прямо сейчас изображение хранится локально, но будет извлечено из базы данных в будущем. Все работает, как и ожидалось, но источник изображения не устанавливается, когда я использую URL.createObjectURL(blob), кажется, что URL поврежден.

Вот мой код:

      takePicture() {
        // eslint-disable-next-line no-undef
        const srcType = Camera.PictureSourceType.CAMERA;
        const options = {
            // Some common settings are 20, 50, and 100
            quality: 10,
            // eslint-disable-next-line no-undef
            destinationType: Camera.DestinationType.FILE_URI,
            // In this app, dynamically set the picture source, Camera or photo gallery
            sourceType: srcType,
            // eslint-disable-next-line no-undef
            encodingType: Camera.EncodingType.PNG,
            // eslint-disable-next-line no-undef
            mediaType: Camera.MediaType.PICTURE,
            allowEdit: true,
            correctOrientation: true, //Corrects Android orientation quirks
        };
        navigator.camera.getPicture(
            function cameraSuccess(imageUri) {
                window.resolveLocalFileSystemURL(
                    imageUri,
                    function success(fileEntry) {
                        fileEntry.file(
                            function(file) {
                                const reader = new FileReader();
                                reader.onloadend = function() {
                                    const blob = new Blob([new Uint8Array(this.result)], { type: 'image/png' });
                                    const elem = document.getElementById('img');
                                    elem.src = URL.createObjectURL(blob);
                                };
                                reader.readAsArrayBuffer(file);
                            },
                            function(e) {
                                alert(e);
                            }
                        );
                    },
                    function() {}
                );
            },
            function cameraError(error) {
                alert('Unable to obtain picture: ' + error, 'app');
            },
            options
        );

Если я уберу эту строку кода: elem.src = URL.createObjectURL(blob);

и заменим ее следующим: elem.src = imageUri;

Все работает нормально, поэтому я знаю, что изображение сохраняется правильно. Возможно ли, что изображение слишком велико и поэтому отклоняется?

1 Ответ

0 голосов
/ 21 марта 2020

ОК, после некоторого устранения неполадок, я обнаружил, что проблема в том, что в теге отсутствует директива img-sr c. Чтобы это исправить, я просто добавил img-src '*' data: blob: ; в тег, и все работает.

Примечание: просто добавление '*' не сработало. Я также должен был добавить blob:, а также

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...