2016-09-28 72 views
1

我有一个Meteor应用程序,我试图从.epub文件中提取一些图像,然后将它们保存到Cloudinary,但我没有任何运气。以下是我迄今所做:将blob数据上传到Cloudinary

使用epub.js我加载.epub文件并读取图像数据:

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

我可以手动分配cover._url到图像源和图像呈现为预期:

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

我试图上传cover._result"blob:http://localhost:3000/6433bd4e-13dc-462b-b7be-e9654ad06c18"像这样:

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

,我没有得到响应

我也试过这样:

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

的文件上传,但它的垃圾数据,而不是可读

最后我试图转换文件为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); 
      } 
     }); 
    }) 

我没有得到Cloudinary.upload函数的响应。

我的问题是,Cloudinary是否支持这种类型的功能?

谢谢。

解决

这是与流星包本身的问题。

我不得不改变这一点:

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); 
     } 
    }); 
}) 

这样:

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

并没有问题,上传的图像数据。

回答

0

我不得不这样改变:

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); 
     } 
    }); 
}) 

这样:

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