我使用的是最新版本的KeystoneJS
,并且有一个表单可以将记录添加到数据库中。
我无法让图片上传工作。
我的模型包含:
heroImage: { type: Types.CloudinaryImage, autoCleanup : true },
我的表格包括:
<input type="file" accept="image/*" id="heroImage" name="heroImage_upload" className='field-upload'>
我保存表单的中间件只包括:
view.on('post', {action: 'save'}, function(next)
{
var newProperty = new Property.model(req.body);
console.log(newProperty);
newProperty.save(function(err, body)
{});
});
除了文件上传外,适用于所有字段。
我尝试添加:
newProperty.heroImage = req.files['heroImage'];
将heroImage
留空。
我也尝试创建cloudinaryImage
,但这会导致错误:
var img = new CloudinaryImage(req.files['heroImage']);
当我使用KeystoneJS
管理信息中心上传图片时,一切正常。有人可以解释我应该如何使用我自己的cloudinaryImage
字段类型吗?
由于
答案 0 :(得分:0)
不确定这是否有帮助,但文档底部有一个注释: http://keystonejs.com/docs/database/#fieldtypes-cloudinaryimage
“请记住,如果您使用HTML表单将图片上传到CloudinaryImage
字段,则需要在enctype="multipart/form-data"
代码中指定form
。”
您是否已将其包含在表单中?
因此,假设您的模型名为MyModel,并且您的表单数据使用与模型相同的对象键,则以下内容应该有效。 (即,heroImage
字段的图像应在POST数据中以heroImage
提供。
var MyModel = keystone.list('MyModel');
view.on('post', {action: 'save'}, function(next)
{
var item = new MyModel.model();
data = req.body;
item.getUpdateHandler(req).process(data, function(err) {
// Handle error
}
}
然后,Keystone应该在内部处理所有特定的云资源。
答案 1 :(得分:0)
以下是使用cloudinary.v2
未经测试的keystone
cloudinary.v2.uploader.upload(base64_file_data, (err, result) => {
var newMyModel = new MyModel.model(model_data);
newMyModel.image = result;
let updater = newMyModel.getUpdateHandler(req);
updater.process(newMyModel, {
fields: image
}, err => {...})
})
测试了猫鼬
cloudinary.v2.uploader.upload(base64_file_data, (err, result) => {
var newMyModel = new MyModel.model(model_data);
newMyModel.image = result;
newMyModel.save(err => {...})
})