我使用以下html来允许用户上传图片:
<input class="upload" type="file" id="upload">
我有以下方法上传到Cloudinary:
cloud : function (source) {
cloudinary.uploader.upload(source, function(result) { console.log(result) },
{ public_id: "test" });
},
以下检测输入并调用方法:
'change #upload': function(event, template) {
var imgVal = document.getElementById("upload");
Meteor.call("cloud",imgVal);
},
我收到此错误:
Exception while invoking method 'cloud' TypeError: Object #<Object> has no method 'match'
I20150813-10:10:38.007(-4)? at C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:61:34
I20150813-10:10:38.007(-4)? at call_api (C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:368:22)
I20150813-10:10:38.008(-4)? at Object.exports.upload (C:\Users\Raj\art\.meteor\local\isopacks\npm-container\npm\node_modules\cloudinary\lib\uploader.js:58:12)
I20150813-10:10:38.008(-4)? at [object Object].Meteor.methods.cloud (app\art.js:132:28)
I20150813-10:10:38.008(-4)? at maybeAuditArgumentChecks (packages/ddp/livedata_server.js:1617:1)
I20150813-10:10:38.008(-4)? at packages/ddp/livedata_server.js:648:1
I20150813-10:10:38.008(-4)? at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20150813-10:10:38.008(-4)? at packages/ddp/livedata_server.js:647:1
I20150813-10:10:38.009(-4)? at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)
I20150813-10:10:38.009(-4)? at [object Object]._.extend.protocol_handlers.method (packages/ddp/livedata_server.js:646:1)
=> Meteor server restarted
我该怎么做才能解决这个问题?
答案 0 :(得分:0)
图片上传不支持Meteor.call功能。
尝试:
'yourcollection'.allow({ <-- without the ''.
insert: function() {return true},
update: function() {return true},
});
把它放在你的lib / yourcollection.js
中答案 1 :(得分:0)
cloudinary.uploader.upload
期望第一个参数file
是一个字符串。您正在发送HTMLInputElement
。
您可以使用files
属性和FileReader
从输入元素中将所选文件解压缩为base64编码的字符串:
'change #upload': function(event, template) {
var imgVal = document.getElementById("upload");
var files = imgVal.files; // FileList object
// Loop through the FileList and upload each image file.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
Meteor.call("cloud",e.target.result);
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
},
(来自http://www.html5rocks.com/en/tutorials/file/dndfiles/的来源。)
请注意,cloudinary_npm是为服务器端操作而设计的 - 但我相信上面的代码可以正常工作。