Nativescript - загрузка изображений с использованием модуля http - PullRequest
0 голосов
/ 12 января 2019

Я использую плагин nativescript-imagepicker для получения изображения из библиотеки устройств. Для этого я вызываю два модуля:

var imagepicker = require("nativescript-imagepicker");
var imageSourceModule = require("tns-core-modules/image-source");

На данный момент у меня есть некоторая функция, которая показывает галерею, и я могу выбрать изображение, которое затем преобразуется в строку base64 и назначается в качестве глобальной переменной для дальнейшего использования:

model.gallery = function () {
    var img;
    var context = imagepicker.create({mode: "single"});
    context.authorize()
        .then(function () {
            return context.present();
        })
        .then(function (selection) {
            selection.forEach(function (selected) {
                img = selected;
                model.set('avatar', img);
            });
            var source = new imageSourceModule.ImageSource();
            source.fromAsset(img)
                .then(function (imageSource) {
                    var convertedAvatar = imageSource.toBase64String("jpeg",1);
                    global.convertedAvatar = convertedAvatar;
                });
        }).catch(function (e) {
        alert ('Error, please try  again');
    });
};

Кажется, все работает нормально, но, пожалуйста, обратите внимание на качество изображения (1). Я пробовал качество 90, но кажется, что строка была настолько длинной, что этот http-вызов вызывал сбой приложения:

model.test = function() {
    var base64 = global.convertedAvatar;
    var content = 'type=profile&file='+base64+'&extension=jpeg';
    http.request({
        url: global.host + 'profile/upload',
        method: 'POST',
        headers: {"Content-Type": global.cType},
        content: content,
    }).then(function (response) {
        global.loaderHide();
        result = response.content.toJSON();
        if (response.statusCode == 200) {
            success('Success','Data saved.')
        } else {
            global.alerts('Error',result.message);
        }
    }).catch(function (error) {
        global.alerts('Error', error);
    });
};

Мой вопрос: я думаю, что мой подход неверен, поскольку у меня есть проблемы. Строка Base64 очень длинная. Есть ли способ сделать это правильно? Могу ли я изменить размер изображения, чтобы строка могла быть меньше? Или, может быть, это проблема API (не принимает очень длинные строки)? Наконец, может быть, мне нужно использовать другой метод, например фоновый модуль http для загрузки изображений, а не строки base64? Спасибо за любые идеи.

Под приложенным изображением, как долго строка base64 является ровной с качеством enter image description here, установленным в 1.

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