Cordova/phonegap: сделайте фото и отправьте его на мой сервер

на данный момент в моем приложении у меня есть экран, на котором пользователь нажимает «отправить» и отправляет некоторые данные на сервер (служба wcf).

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

Я добавил плагин (камеру) и создал шаблон.

function capturePhoto() {
    alert("1");
    navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
        quality: 50,
        destinationType: navigator.camera.DestinationType.FILE_URI,
        //destinationType: navigator.camera.DestinationType.NATIVE_URI,
        //sourceType: sourceType.CAMERA
    });
}

function onPhotoDataSuccess(imageData) {
    alert("S");
    var smallImage = document.getElementById('myImage');
    smallImage.style.display = 'block';
    smallImage.src = "data:image/jpeg;base64," + imageData;
    image = "data:image/jpeg;base64," + imageData;
    alert("Image = " + image);
}

function onFail(message) {
    alert('Failed because: ' + message);
}

Я уверен, что мне нужно управлять чем-то в функции onSuccess, но как я могу достичь своей цели? После того, как снимок сделан, я должен отправить его, добавив изображение в качестве параметров здесь:

$.ajax({
    type: "POST",
    contentType: "application/json",
    dataType: "json",
    url: url,
    data: JSON.stringify({ "data": date_str, "PICTUREHERE":pictureHere }),
    success: function (output) {
          //my stuff
            },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
          //my error stuff

     }
 });

Моя функция deviceReady:

$(document).on("deviceready", function () {
    navigator.splashscreen.hide();
});

Я думаю, что на стороне сервера параметр "pictureHere" должен быть байтом [], но я не знаю, как управлять стороной приложения.

ОБНОВЛЕНИЕ: мой config.xml

<widget id="com.devexpress.apptemplate" version="1.0" versionCode="1">
  <name>ApplicationTemplate</name>
  <description>Template</description>
  <author email="[email protected]" href="http://www.info.com/">info</author>
  <preference name="permissions" value="none" />
  <preference name="prerendered-icon" value="true" />
  <preference name="android-windowSoftInputMode" value="adjustPan" />
  <!--<preference name="phonegap-version" value="cli-7.0.1" />-->

  <!--<preference name="SplashScreen" value="splash" />-->
  <preference name="SplashScreenDelay" value="60000" />
  <preference name="AutoHideSplashScreen" value="false" />
  <preference name="SplashShowOnlyFirstTime" value="false" />
  <preference name="FadeSplashScreen" value="false" />
  <preference name="ShowSplashScreenSpinner" value="false" />
  <preference name="DisallowOverscroll" value="true" />
  <preference name="StatusBarOverlaysWebView" value="false" />
  <preference name="StatusBarBackgroundColor" value="#000000" />
  <preference name="android-minSdkVersion" value="14" />
  <preference name="android-targetSdkVersion" value="22" />
  <!--<plugin name="cordova-plugin-file" />-->
  <!--<plugin name="cordova-plugin-camera" />-->
  <plugin name="cordova-plugin-camera" spec="^2.4.1">
    <variable name="CAMERA_USAGE_DESCRIPTION" value=" " />
    <variable name="PHOTOLIBRARY_USAGE_DESCRIPTION" value=" " />
  </plugin>
  <plugin name="cordova-plugin-splashscreen" onload="true" />
  <plugin name="cordova-plugin-whitelist" />
  <plugin name="cordova-plugin-ios-longpress-fix" />
  <plugin name="cordova-plugin-statusbar" onload="true" />
  <access origin="*" />
</widget>

На моей html-странице я добавил

<img id="myImage" />

person Piero Alberto    schedule 08.09.2017    source источник


Ответы (1)


function getImage() {
  // Retrieve image file location from specified source
  navigator.camera.getPicture(function(pictureHere){
    $.ajax({
      type: "POST",
      contentType: "application/json",
      dataType: "json",
      url: url,
      data: JSON.stringify({ "data": date_str, "PICTUREHERE":pictureHere}),
      success: function (output) {
        //my stuff
      },
      error: function (XMLHttpRequest, textStatus, errorThrown) {
        //my error stuff
      }
      });
    }, function (message) {
      Alert("Error", "error");
    }, {
      quality: 50,
      destinationType: navigator.camera.DestinationType.FILE_URI,
      sourceType: navigator.camera.PictureSourceType.PHOTOLIBRARY
    }
  );
}

pictureHere должна быть строкой base64.

person user5091906    schedule 12.09.2017
comment
Хорошо, надо попробовать! Но на данный момент у меня есть еще одна проблема: я не могу открыть камеру, конечно, я что-то упускаю... посмотрите обновление, пожалуйста.. вы видите какие-либо ошибки? Когда я пытаюсь сделать снимок, я вижу предупреждение (1), но после этого ничего не происходит. - person Piero Alberto; 12.09.2017
comment
Вы должны получить какую-то ошибку. Не могли бы вы увидеть это на консоли.? попробуйте добавить sourceType: Camera.PictureSourceType.PHOTOLIBRARY для загрузки из галереи, а также проверьте разрешения вашего устройства. - person user5091906; 12.09.2017
comment
Вот, точка! Когда я устанавливаю приложение, у меня есть запрос на разрешение памяти, но не на использование камеры! Почему? - person Piero Alberto; 12.09.2017
comment
какое устройство? иос/андроид? - person user5091906; 12.09.2017
comment
сейчас тестирую андроид - person Piero Alberto; 12.09.2017
comment
Я напечатал предупреждение в операторе try/catch, чтобы понять, что происходит. Я получаю Невозможно прочитать свойство 'getPicture' неопределенного. Итак, это действительно похоже на то, что если камера не готова к использованию... что я упускаю? - person Piero Alberto; 12.09.2017
comment
импорт cordova.js отсутствовал - person Piero Alberto; 13.09.2017
comment
Вы написали, что pictureHere должна быть строкой base64, но в вашем коде нет этого параметра, почему? - person Piero Alberto; 13.09.2017
comment
Вы использовали file_uri, но я вижу, что это должен быть DATA_URL для base64. - person Piero Alberto; 13.09.2017