我正在使用最新版本的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为null。
我还尝试创建一个cloudinaryImage,但这导致了一个错误:
var img = new CloudinaryImage(req.files['heroImage']);当我使用KeystoneJS管理仪表板上传图片时,一切都很正常。有人能解释一下我应该如何在我自己的表单中使用cloudinaryImage字段类型吗?
谢谢
发布于 2016-05-24 17:10:09
我不确定这是否会有帮助,但在文档的底部有一个注释:http://keystonejs.com/docs/database/#fieldtypes-cloudinaryimage
请记住,如果要使用超文本标记语言表单将图像上载到CloudinaryImage字段,则需要在form标记中指定enctype="multipart/form-data"。
你有没有在你的表格中包括这一点?
更新:
因此,假设您的模型名为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应该在内部处理所有特定的cloudinary内容。
发布于 2017-06-14 04:44:27
下面是一种使用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 => {...})
})测试的mongoose
cloudinary.v2.uploader.upload(base64_file_data, (err, result) => {
var newMyModel = new MyModel.model(model_data);
newMyModel.image = result;
newMyModel.save(err => {...})
})https://stackoverflow.com/questions/37387309
复制相似问题