将图像内容从相机加载到文件

Arc*_*yne 7 ripple angularjs cordova parse-platform

我使用以下drictive使用phonegap API拍照(或从库中选择):

MyApp.directive('Camera', function () {
    return {
        restrict: 'A',
        require: 'ngModel',
        link: function(scope, elm, attrs, ctrl) {
            elm.bind('click', function() {
                navigator.camera.getPicture(function (imageURI)
                {
                    scope.$apply(function() {
                        ctrl.$setViewValue(imageURI);
                    });
                }, function (err) {
                    ctrl.$setValidity('error', false);
                },
                //Options => http://docs.phonegap.com/en/2.6.0/cordova_camera_camera.md.html#Camera
                { quality: 50,
                  destinationType:Camera.DestinationType.FILE_URI                      
                })
            });
        }
    };
});
Run Code Online (Sandbox Code Playgroud)

这给我一个看起来像的URI,使用chrome上的ripple模拟器,我可以看到粘贴这个URI.

blob:http%3A//localhost%3A8080/8e18de30-d049-4ce2-ae88-8500b444581e
Run Code Online (Sandbox Code Playgroud)

我的问题是加载此URI

$scope.updateUserProfile = function (user) {

       var myPicfile = $http.get(user.myPicture);

       dataService.uploadPicture . . . some code to update the picture to Parse

    }
Run Code Online (Sandbox Code Playgroud)

*注意:我不能与parse.com一起使用phonegap文件传输:

当我这样做时,我得到:

在此输入图像描述

我提出的要求是:

uploadPicture:function uploadPicture(user,callback){var serverUrl =' https ://api.parse.com/1/files/'+ user.Nick;

            $http({
                method: 'POST',
                url: serverUrl,
                data: user.myPicture,
                headers: {'X-Parse-Application-Id': PARSE_APP_ID,
                    'X-Parse-REST-API-Key': PARSE_REST_API_KEY,
                    'Content-Type': 'text/plain'
                }
            })
Run Code Online (Sandbox Code Playgroud)

有关如何将图像内容添加到文件然后我可以愉快地上传到Parse.com的任何想法?

谢谢!

Arc*_*yne 4

我终于解决了这个问题,因为我的最终目标是将它与phonegap一起使用,并使用这篇文章中的信息。。非常感谢雷蒙德·卡姆登!

function gotPic(data) {

window.resolveLocalFileSystemURI(data, function(entry) {

var reader = new FileReader();

reader.onloadend = function(evt) {
    var byteArray = new Uint8Array(evt.target.result);
    var output = new Array( byteArray.length );
    var i = 0;
    var n = output.length;
    while( i < n ) {
        output[i] = byteArray[i];
        i++;
    }                
    var parseFile = new Parse.File("mypic.jpg", output);

    parseFile.save().then(function(ob) {
            navigator.notification.alert("Got it!", null);
            console.log(JSON.stringify(ob));
        }, function(error) {
            console.log("Error");
            console.log(error);
        });

}

reader.onerror = function(evt) {
      console.log('read error');
      console.log(JSON.stringify(evt));
  }

entry.file(function(s) {
    reader.readAsArrayBuffer(s);
}, function(e) {
    console.log('ee');
});

});
}
Run Code Online (Sandbox Code Playgroud)