Nativescript ImageSource HTTP Post - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь загрузить изображение, снятое с плагина Nativescript Camera Plus (тип ImageSource), и загрузить его на мой API-сервер с помощью плагина Nativescript HTTP Form Data.Я уже проверил свой бэкэнд (Django) с помощью Postman, и он работает.Я не могу понять, как перейти из ImageSource к реальному файлу PNG / JPG, содержащему это изображение, чтобы загрузить его отдельно (а не данные ImageSource).

Я пытался использовать сам объект ImageSource,но это отправляет пустой файл.Затем я попытался следовать демонстрации плагина HTTPFormData и использовал UIImageRepresentation и растровые изображения (ios / Android), но он по-прежнему отправляет пустой файл.

let fd = new TNSHttpFormData();

    let params = [];

    let imageData: any;
        if(this.scannedID.image_data) {
            if(this.scannedID.image_data.ios) {
                console.log("iOS" + this.scannedID.image_data.width + " " + this.scannedID.image_data.height);
                imageData = this.scannedID.image_data.ios.UIImagePNGRepresentation;
            } else {
                let bitmapImage = this.scannedID.image_data.android.graphics.Bitmap;
                let stream = this.scannedID.image_data.android.java.io.ByteArrayOutputStream();
                bitmapImage.compress("PNG", 100, stream);
                let byteArray = stream.toByteArray();
                bitmapImage.recycle();

                imageData = byteArray;
            }
        }
        let param: TNSHttpFormDataParam = {
            data: imageData,
            contentType: 'image/png',
            fileName: 'idtest1.png',
            parameterName: 'image'
        };
        params.push(param);


    console.log("Parameters: " + JSON.stringify(param));
    console.log(params[0].data);
    try {
        const response: TNSHttpFormDataResponse = await fd.post(this.apiURL + 'VerificationID/', params, { headers: this.createRequestHeader(false) } );
        console.log(response);
        return response;
    } catch (e) {
        console.log(e);
        return e;
    }

Он выводит ширину / высоту, поэтому язнаю, что изображение там.Я считаю, что мой .ios.UIImagePNGRepresentation не возвращает PNG, как я хочу.Если я выводю параметр, который я создаю с файлом, он выводит все данные объекта, кроме «данных» (которые должны быть фактическими данными файла).Я не уверен, куда идти отсюда.Любая помощь будет оценена!

1 Ответ

0 голосов
/ 12 июня 2019

Я не уверен, как вы доберетесь до this.scannedID.image_data.

Но если вы используете плагин camera plus, он вернет image-asset с соответствующей шириной и высотой, используя метод getImageAsync (callback) дляресурс изображения должен вернуть вам UIImage (iOS) / Bitmap (Android).

Это может быть что-то вроде этого в событии, снятом вами,

function onPhotoCaptured(args) {
  const asset = args.data;
  asset.getImageAsync((image, error) => {
        let imageData: any;
        if(image) {
            if(asset.ios) {
                imageData = UIImagePNGRepresentation(image);
            } else {
                let bitmapImage: android.graphics.Bitmap = image;
                let stream = new java.io.ByteArrayOutputStream();
                bitmapImage.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, stream);
                let byteArray = stream.toByteArray();
                bitmapImage.recycle();

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