2016-09-28 3 views
1

Ich habe eine Meteor-Anwendung und versuche einige Bilder aus .epub Dateien zu extrahieren und sie dann in Cloudinary zu speichern, aber ich habe kein Glück. Hier ist, was ich bisher getan:Upload von Blobdaten nach Cloudinary

epub.js Mit lade ich die .epub Datei und lesen Sie die Bilddaten:

const book = ePub('path_to_file.epub'); 
const cover = book.coverUrl(); 
/* cover._result returns this: 
"blob:http://localhost:3000/6433bd4e-13dc-462b-b7be-e9654ad06c18" 
*/ 

ich manuell cover._url zu einer Bildquelle zuordnen kann und das Bild macht, wie erwartet:

$('#bookImage').attr('src', cover._result) 

ich habe versucht, die cover._result, "blob:http://localhost:3000/6433bd4e-13dc-462b-b7be-e9654ad06c18" wie so laden:

Cloudinary.upload(cover._result,{ 
    folder: 'Books', 
    resource_type: 'raw', 
    },function(err, res){ 
    if (err){ 
     console.log(err); 
    } else { 
     console.log(res); 
     } 
    }); 

und ich bekomme keine Antwort

Ich habe auch versucht dies:

const myFile = new File([cover._result], "new_file.jpg", {type: "image/jpg"}); 
Cloudinary.upload(myFile,{...}) 

Die Datei-Uploads, aber seine Datenmüll und nicht lesbar

Schließlich habe ich versucht, die Datei umzuwandeln, wie dies base64 :

const toDataUrl = function(cover, callback) { 
const xhr = new XMLHttpRequest(); 
    xhr.responseType = 'blob'; 
    xhr.onload = function() { 
    var reader = new FileReader(); 
    reader.onloadend = function() { 
     callback(reader.result); 
    } 
    reader.readAsDataURL(xhr.response); 
    }; 
    xhr.open('GET', cover); 
    xhr.send(); 
} 

/******************/ 
     toDataUrl (cover._result, function(base64Img) { 
     Cloudinary.upload(base64Img,{ 
      folder: 'Books', 
      resource_type: 'raw', 
     },function(err, res){ 
      if (err){ 
       console.log(err); 
      } else { 
       console.log(res); 
      } 
     }); 
    }) 

Ich bekomme keine Antwort von der Cloudinary.upload Funktion.

Meine Frage ist, unterstützt Cloudinary diese Art von Funktionalität?

Danke.

GELöST

Das war ein Problem mit dem Meteor-Paket selbst.

Ich hatte dies zu ändern:

toDataUrl (cover._result, function(base64Img) { 
    Cloudinary.upload(base64Img,{ 
     folder: 'Books', 
     resource_type: 'raw', 
    },function(err, res){ 
     if (err){ 
      console.log(err); 
     } else { 
      console.log(res); 
     } 
    }); 
}) 

dazu:

Daten
toDataUrl (cover._result, function(base64Img) { 
    Cloudinary._upload_file(base64Img,{ 
     folder: 'Books', 
    },function(err, res){ 
     if (err){ 
      console.log(err); 
     } else { 
      console.log(res); 
     } 
    }); 
}) 

und das Bild ohne Problem hochgeladen.

Antwort

0

Ich hatte dies zu ändern:

toDataUrl (cover._result, function(base64Img) { 
    Cloudinary.upload(base64Img,{ 
     folder: 'Books', 
     resource_type: 'raw', 
    },function(err, res){ 
     if (err){ 
      console.log(err); 
     } else { 
      console.log(res); 
     } 
    }); 
}) 

dazu:

toDataUrl (cover._result, function(base64Img) { 
    Cloudinary._upload_file(base64Img,{ 
     folder: 'Books', 
    },function(err, res){ 
     if (err){ 
      console.log(err); 
     } else { 
      console.log(res); 
     } 
    }); 
})