我有一个关于 Strapi v4 的大问题,我知道很多人都在问这个问题。但我上网花了4个小时,发现了很多案例,但没有一个是解决了,就是放弃了。
问题是(见截图)
我有一个组件,它有一个 Media 字段,我如何使用 RestAPI 将图像加载到该字段中?
如果我的属性(这是属性集合的父级)只有“媒体”字段,不涉及任何组件/动态区域/块,我就能够加载图像。
但目前的实现要求我使用嵌套的 Media 字段,因为该组件是重复的,并且它将具有不同的项目(房间),并且每个房间都有自己的照片或照片数组。
我试图弄清楚我需要发出什么样的请求(或创建一个自定义控制器),以便当我将正确的数据和路径传递给 formData 时,我将加载图像,然后将图像绑定到组件?
其实嵌套比较深,但总体来说问题很清楚。
如有任何建议,我将不胜感激。
这是许多开发者的挣扎点。不受欢迎的主要原因:
the forms aren't supposed to work that way
基本上,当用户创建表单时,您实际上并不希望在提交表单时处理上传,但您希望在添加到表单时上传元素(使用
/upload
)。这可以帮助您避免诸如主体尺寸过大、更容易验证和其他问题等错误,如果您注意到 Strapi 媒体的工作原理与您上传到库然后附加...
无论如何,这里的秘密是
lodash
get prop 方法,它将地址扁平化为 my.array[0].media[0]
因此,假设我们有内容类型
article
,并且有名为 section
的可重复组件,并且其中有 image
字段:
const formData = new FormData();
formData.append('files.section[0].image', file, file.name)
P.s.需要从头部进行测试
文档指出:
If you want to upload files for a repeatable component, you will have to specify the zero-based index of the item you want to add the file to, using the following syntax: files.my_component_name[the_index].attribute_name. For instance, if you put 3 components and the file is for the second one, the index will be 1.
希望有帮助!