Ошибка Apache Cordova при загрузке обрезанного изображения на сервер из IOS

В моем мобильном приложении IOS я делаю снимок, а затем выбираю изображение из галереи. После выбора этого изображения я использую ng-img-crop.js, чтобы обрезать это изображение и без сохранения этого обрезанного изображения, пытаюсь загрузить его на сервер, на стороне сервера является С#WCF. (В этом конкретном примере я пытаюсь загрузить локальный IIS) Но я получаю эту ошибку:

ERROR: {"code":1,"source":"data:image/png;base64,iVBORw0KGgoAAAANSUhE...","target":"http://11.111.11.111/wcf/OCRService.svc/upload","http_status":null,"body":null,"exception":null}
app.js (76,24)

Должен ли я сохранить это обрезанное изображение в галерее перед загрузкой на сервер? Есть ли способ загрузить его без сохранения?

Вот мой HTML:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />

    <meta http-equiv="Content-Security-Policy" content="connect-src 'self' http://11.111.11.111/wcf/OCRService.svc/upload 'unsafe-eval' 'unsafe-inline'; default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">

    <title>LoTTo</title>-->

    <!-- LoTTo references -->
    <link href="css/ionicons.css" rel="stylesheet" />
    <link href="css/ionic.css" rel="stylesheet" />
    <link href="css/ng-img-crop.css" rel="stylesheet" />

    <!-- Cordova reference, this is added to your app when it's built. -->
    <script src="scripts/angular.min.js"></script>
    <script src="scripts/ionic.bundle.js"></script>
    <script src="scripts/ng-cordova.min.js"></script>
    <script src="scripts/ng-img-crop.js"></script>
    <script src="cordova.js"></script>
    <script src="scripts/platformOverrides.js"></script>
    <script src="scripts/app.js"></script>
    <script src="scripts/index.js"></script>
    <script src="scripts/ng-file-upload-shim.min.js"></script>
    <script src="scripts/ng-file-upload.min.js"></script>

    <style>
        .cropArea {
            background: #E4E4E4;
            overflow: hidden;
            width: 300px;
            height: 300px;
        }
        .croppedArea {
            background: #E4E4E4;
            overflow: hidden;
            width: 300px;

        }
    </style>
</head>
<body ng-app="starter">
    <ion-header-bar class="bar bar-header bar-light">
        <h1 class="title">LoTTo</h1>
    </ion-header-bar>
    <ion-content ng-controller="ExampleController" padding="true">
        <button class="button button-full button-balanced icon-right ion-ios-camera" ng-click="takePhoto()">
            Resim Çek
        </button>

        <button class="button button-full button-balanced icon-right ion-images" ng-click="choosePhoto()">
            Resim Seç
        </button>
        <center>
            <div class="cropArea">

                <img-crop image="myImage" result-image="myCroppedImage" chargement="'Loading'"
                          area-type="rectangle"
                          area-min-size="50"
                          result-image-format="image/jpeg"
                          result-image-quality="1"
                          result-image-size="{w:300, h:50}"></img-crop>

            </div>
            <div ng-show="myImage !== undefined">Gönderilecek Resim:</div>
            <div class="croppedArea"><img ng-src="{{myCroppedImage}}" ng-show="myImage !== undefined" id="image" /></div>


        </center>
        <button class="button button-full button-balanced icon-right ion-images" ng-click="upload(myCroppedImage);" ng-if="myImage !== undefined">
            Resim Yükle
        </button>

    </ion-content>    
</body>
</html>

Вот приложение.js:

angular.module('starter', ['ionic', 'ngCordova', 'ngImgCrop', 'ngFileUpload'])

.controller("ExampleController", ['$scope', '$cordovaCamera', 'Upload', '$timeout', '$cordovaFileTransfer', function ($scope, $cordovaCamera, Upload, $timeout, $cordovaFileTransfer) {

    $scope.takePhoto = function () {
        var options = {
            quality: 100,
            destinationType: Camera.DestinationType.DATA_URL,
            sourceType: Camera.PictureSourceType.CAMERA,
            allowEdit: true,
            encodingType: Camera.EncodingType.JPEG,
            targetWidth: 300,
            targetHeight: 300,
            popoverOptions: CameraPopoverOptions,
            saveToPhotoAlbum: true
        };

        $cordovaCamera.getPicture(options).then(function (imageData) {
            $scope.imgURI = "data:image/jpeg;base64," + imageData;
        }, function (err) {
            console.log(err);
            alert(err);
        });
    }

    $scope.choosePhoto = function () {
        var options = {
            quality: 100,
            destinationType: Camera.DestinationType.DATA_URL,
            sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
            allowEdit: true,
            encodingType: Camera.EncodingType.JPEG,
            targetWidth: 300,
            targetHeight: 300,
            popoverOptions: CameraPopoverOptions,
            saveToPhotoAlbum: false
        };

        $cordovaCamera.getPicture(options).then(function (imageData) {
            $scope.imgURI = "data:image/jpeg;base64," + imageData;
            $scope.myImage = $scope.imgURI;

        }, function (err) {
            console.log(err);
            alert(err);
        });
    }

    $scope.myCroppedImage = '';

    $scope.upload = function (dataUrl) {

    Upload.upload({

        url: 'http://192.168.1.20/wcf/upload',
        data: {
            file: Upload.dataUrltoBlob(dataUrl)
        },

    }).then(function (response) {
        $timeout(function () {
            $scope.result = response.data;
            console.log(response.data);
            alert(response.data);
        });
        console.log(response.data);
    }, function (response) {
        if (response.status > 0) $scope.errorMsg = response.status
            + ': ' + response.data;
        alert(response.status);
    });

}

}]);

Изменить 1. Как добавить Access-Control-Allow-Origin в мое мобильное приложение?

Изменить 2: изменен раздел загрузки

С уважением.


person Cenk    schedule 18.01.2016    source источник


Ответы (1)


Этот пример может вам помочь: проверьте этот jsfiddle: [http://jsfiddle.net/xxo3sk41/1/][1]

код :

var app = angular.module('fileUpload', ['ngFileUpload', 'ngImgCrop']);

app.controller('MyCtrl', ['$scope', 'Upload', '$timeout', function ($scope, Upload, $timeout) {
$scope.upload = function (dataUrl) {
    Upload.upload({
        url: 'https://angular-file-upload-cors-srv.appspot.com/upload',
        data: {
            file: Upload.dataUrltoBlob(dataUrl)
        },
    }).then(function (response) {
        $timeout(function () {
            $scope.result = response.data;
        });
    }, function (response) {
        if (response.status > 0) $scope.errorMsg = response.status 
            + ': ' + response.data;
    }, function (evt) {
        $scope.progress = parseInt(100.0 * evt.loaded / evt.total);
    });
}
}]);
person Tushar    schedule 18.01.2016
comment
Я получаю эту ошибку **Не удалось загрузить ресурс: время запроса истекло. @Tushar - person Cenk; 18.01.2016
comment
Дома я получаю эту ошибку: Не удалось загрузить ресурс: сервер ответил со статусом 405 (метод не разрешен) загрузка (0,0) - person Cenk; 18.01.2016
comment
Я использую локальный IIS 7.5 и установил asp, isapi и т. д. Теперь я получаю 0 из ответа. Что это значит? В IIS нет журнала ошибок. Если 0 означает успешное выполнение, в загруженной папке нет файла. - person Cenk; 20.01.2016
comment
Я попробую эту [ссылку] (stackoverflow.com/questions/12458444/) и дайте вам знать. - person Cenk; 20.01.2016
comment
@Cenk, эта проблема решена или вы все еще не можете найти решение? - person Tushar; 22.01.2016
comment
не решен, все еще работаю над этим. Я думаю, что есть проблема с CORS. Должен ли я вместо этого использовать Upload.http? - person Cenk; 22.01.2016
comment
@Cenk, проблема может быть здесь: var targetPath = CroppedImg; - person Tushar; 22.01.2016
comment
Я уже изменил раздел загрузки, как вы предложили, но все равно получил 0 ответов. Пожалуйста, проверьте мое редактирование 2. - person Cenk; 22.01.2016
comment
$scope.upload = function (dataUrl) { .... Этот метод требует fileUrl, но вы передаете объект данных, а не URL. - person Tushar; 22.01.2016
comment
Я пытаюсь отправить обрезанное изображение, не сохраняя его в галерее. Есть ли способ сделать это? - person Cenk; 22.01.2016
comment
Используя этот плагин, вы, вероятно, не сможете этого сделать. Используйте другой плагин, который имеет эту функцию. Для этого плагина вы можете удалить файл после успешной загрузки. Таким образом, файл будет загружен, и его не будет там после загрузки. - person Tushar; 23.01.2016
comment
Привет @Tushar, могу ли я отправить это изображение в веб-службу на сервере, чтобы распознать это изображение и вернуть результат? Это возможно? - person Cenk; 02.07.2016
comment
Да, почему бы и нет. Это возможно. Сервер должен обработать изображение, а затем вернуть результат в качестве ответа. - person Tushar; 03.07.2016
comment
Можете ли вы предложить другой плагин @Tushar для того, чтобы отправить изображение на веб-сервис и вернуть результат из сервиса без сохранения обрезанного изображения. - person Cenk; 03.07.2016
comment
Взгляните на github.com/jcesarmobile/PhonegapOCRPlugin и github.com/matiastucci/ionic-ocr-example - person Tushar; 04.07.2016
comment
не поймите меня неправильно, но у меня уже есть служба OCR. Я просто хочу отправить изображение в эту службу и получить ответ от этой службы. Как я могу сделать это с моим примером выше? - person Cenk; 04.07.2016