2016-07-24 12 views
0

base64イメージをphonegap(ios)からfirebaseストレージに送信する際に問題があります。主な問題は、firebaseストレージはBLOBまたはファイルとして添付ファイルとしてのみ受け入れられることです。Base64イメージをFirebase Storageに送信するphonegap

Heresカメラ機能のマイコード。コルドバ・プラグインカメラ

function GetCamera(){ 
navigator.camera.getPicture(cameraSuccess, cameraError, {quality :50, 
    destinationType: Camera.DestinationType.DATA_URL, 
    encodingType: Camera.EncodingType.JPEG, 
    saveToPhotoAlbum: true});} 

機能は

function b64toblob(b64_data, content_type) { 
    content_type = content_type || ''; 
    var slice_size = 512; 

    var byte_characters = atob(b64_data); 
    var byte_arrays = []; 

    for(var offset = 0; offset < byte_characters.length; offset += slice_size) { 
     var slice = byte_characters.slice(offset, offset + slice_size); 

     var byte_numbers = new Array(slice.length); 
     for(var i = 0; i < slice.length; i++) { 
      byte_numbers[i] = slice.charCodeAt(i); 
     } 

     var byte_array = new Uint8Array(byte_numbers); 

     byte_arrays.push(byte_array); 
    } 

    var blob = new Blob(byte_arrays, {type: content_type}); 
    return blob;}; 

カメラ成功機能をBLOBにベース64に変換します。そのimageblobグローバル変数

firebaseストレージに

try{ 
var storageRef = storage.ref().child('fire'); 
var uploadTask = storageRef.put(imageblob); 
uploadTask.on('state_changed',null, null, function(){ 
var downloadURL = uploadTask.snapshot.downloadURL; 
console.log("downloadURL :"+downloadURL); 
}); 

をブロブを置く

function cameraSuccess(imageData){ 
document.getElementById('Attachment1').innerHTML = "Attachment: True"; 
var image = imageData; 
imageblob = b64toblob(image,"image/jpeg");} 

であることに注意して取る私は、一つ一つの事を試してみましたが、その作業はありません。あなたの助けが本当に必要です。私はアイデアがありません

答えて

1

Cordovaのカメラプラグインはファイルオブジェクトを返しません。それはプラグインの問題です。 しかし、画像に関するすべての詳細を返します。これを使用すると、blobオブジェクトまたはファイルオブジェクトを作成できます。

Reference for creating blob from file url。お使いのカメラの成功機能でGETファイルブロブ

getFileObject('img/test.jpg', function (fileObject) { // First argument is path of the file 
    console.log(fileObject); 
}); 

ための関数を呼び出す

var getFileBlob = function (url, cb) { 
    var xhr = new XMLHttpRequest(); 
    xhr.open("GET", url); 
    xhr.responseType = "blob"; 
    xhr.addEventListener('load', function() { 
     cb(xhr.response); 
    }); 
    xhr.send(); 
}; 

var blobToFile = function (blob, name) { 
    blob.lastModifiedDate = new Date(); 
    blob.name = name; 
    return blob; 
}; 

var getFileObject = function(filePathOrUrl, cb) { 
    getFileBlob(filePathOrUrl, function (blob) { 
     cb(blobToFile(blob, 'test.jpg')); // Second argument is name of the image 
    }); 
}; 

はこれを試してみてください。

function cameraSuccess(imageData){ 
    document.getElementById('Attachment1').innerHTML = "Attachment: True"; 
    getFileObject(imageData.nativeURL, function(fileObject) { 
      console.log(fileObject); 
      var imgName = fileObject.name; 
      var metadata = { contentType: fileObject.type }; 
      var uploadFile = storageRef.child("images/" + imgName).put(fileObject, metadata); 

      uploadFile.on(firebase.storage.TaskEvent.STATE_CHANGED, function(snapshot) { 
       var progress = (snapshot.bytesTransferred/snapshot.totalBytes) * 100; 
       console.log(progress); 
      }, function(error) { 
       console.log(error); 
      }, function() { 
       var imgFirebaseURL = uploadFile.snapshot.downloadURL; 
       console.log(imgFirebaseURL); 
      }); 
     }); 
    } 
関連する問題