我已将包 cfs:standard-packages 和 cfs:filesystem 添加到我的 Meteor 项目中。
我想使用带有此输入的表单为我的博客上传精选图像。
<div class="form-group">
<label for="featuredImage">Featured Image</label>
<input type="file" id="fImage" required>
<p class="help-block">Please choose an image file.</p>
</div>
和事件 javascript
Template.AddPost.events({
'change #fImage': function(event, template) {
var image = template.find('[id=fImage]').value;
var lastIndex = image.lastIndexOf("\\");
if (lastIndex >= 0) {
image = image.substring(lastIndex + 1);
}
if (!image.match(/\.(jpg|jpeg|png|gif)$/)) {
alert("not an image");
} else {
FS.Utility.eachFile(event, function(file) {
var fileObj = new FS.File(file);
Meteor.call('uploadFeaturedImage', fileObj);
});
}
}
});
服务器上的“uploadFeaturedImage”方法是
Meteor.methods({
'uploadFeaturedImage': function(fileObj){
Uploads.insert(fileObj, function(err){
console.log(err);
});
}
});
当我选择要上传的图像文件时,出现此错误 -
“调用方法‘uploadFeaturedImage’时出现异常错误:DataMan 构造函数收到了它不支持的数据”
任何人都知道为什么会发生这种情况?谢谢。
我从 collectionFS 文档中复制了一些解释,因为那里描述得非常好。
当您需要插入位于客户端上的文件时,请始终在客户端上调用 myFSCollection.insert。虽然您可以定义自己的方法,将其传递给 fsFile,并在服务器上调用 myFSCollection.insert,但困难在于将数据从客户端获取到服务器。当您将 fsFile 传递给您的方法时,仅发送文件信息,而不发送数据。相比之下,当您直接在客户端上执行插入时,它会在插入后自动对文件的数据进行分块,然后将其排队以逐块发送到服务器。然后就是在服务器上重新组合所有这些块并将数据填充回 fsFile 的问题。因此,进行客户端插入实际上可以节省您所有这些复杂的工作,这就是我们推荐它的原因。
看一下HERE https://github.com/CollectionFS/Meteor-CollectionFS#using-insert-properly
所以你的方法不起作用,因为没有数据发送到服务器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)