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);
}
});
})
并没有问题,上传的图像数据。