KeystoneJS Cloudinary图片上传

时间:2016-05-23 09:27:39

标签: express mongoose cloudinary keystonejs

我使用的是最新版本的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字段类型吗?

由于

2 个答案:

答案 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 => {...})   
})