使用Ajax的Phonegap发送图像的结果是[Object ArrayBuffer],而不是二进制

Phonegap send image with Ajax results in [Object ArrayBuffer] instead of binary

本文关键字:ArrayBuffer 二进制 Object Phonegap Ajax 结果是 图像 使用      更新时间:2023-09-26

我有一个函数来获取照片和FILE_URI。哪个有效:

navigator.camera.getPicture(function (data) {
    if (data === false) {
        // Error, or cancel
    } else {
        var fio = new FileIO();
        fio.getFile(data, function(result){
            _this.photo = result;
        }, function(){ });
        _this.templateManager.holder.find("#profielFoto").css("background-image", "url(" + data + ")").addClass("picture");
    }
}, function(){  
}, {
    sourceType: navigator.camera.PictureSourceType.CAMERA,
    quality: 100,
    destinationType: navigator.camera.DestinationType.FILE_URI,
    allowEdit: true,
    correctOrientation: true,
    targetWidth : 200,
    targetHeight: 200
});

接下来,我从fio.getFile得到的结果是:

FileIO.prototype.getFile = function(filename, cb, error){
    window.resolveLocalFileSystemURI(filename, function(fileEntry) { 
        fileEntry.file( function(file) {
            var reader = new FileReader();
            reader.onloadend = function(evt) {
                cb(evt.target.result);
            };
            //reader.onerror = error;
            reader.readAsArrayBuffer(file);
        }, error);
    }, error);
};

所以_this.photo是一个ArrayBuffer。现在我不想用ajax帖子来发送这个。这是可能的,但我做不到。数据库中的数据是[Object ArrayBuffer],但我不执行tostring或任何操作。

var data = new FormData();
data.append("photo", this.photo);
data.append("firstname", $("input[name=firstname]").val());
data.append("insertion", $("input[name=insertion]").val());
data.append("lastname", $("input[name=lastname]").val());
data.append("emailaddress", $("input[name=emailaddress]").val());
data.append("passwordhash", $("input[name=passwordhash]").val());
var xhr = new XMLHttpRequest();
xhr.open('POST', PostURL, true);
xhr.onload = function(oEvent) {
    if (xhr.status == 200) {
        alert("OK"); 
    } else {
      alert("ERROR");
    }
  };
xhr.send(data);

问题:这怎么可能发布[Object ArrayBuffer]而不是我的二进制数据

您应该使用FileTransfer插件。http://plugins.cordova.io/#/package/org.apache.cordova.file-传输