我想创建一个Clojure规范来验证由:multipart
中间件创建的http请求的reitit.ring.middleware.multipart
参数。
多部分表单数据必须包含可以用s/keys
进行验证的特定参数,以及任意数量的具有任意参数名称的文件。
要验证的地图如下所示:
{:visualisation "vis"
:file-xy {:filename "foo.png",:content-type "image/png",:tempfile "C:\\Temp\\ring-multipart-123.tmp",:size 295281}
:file-abc {:filename "bar.png",:tempfile "C:\\Temp\\ring-multipart-456.tmp",:size 42}}
我可以使用reitit.ring.middleware.multipart/temp-file-part
规范来验证文件,如下所示:
(s/def :multipart/files (s/map-of :multipart/param multipart/temp-file-part))
将其放在一起,我想出了一个可以通过的规范,但是它允许所有未知参数为文件或字符串:
(s/def :multipart/param keyword?)
(s/def :multipart/visualisation string?)
(s/def :multipart/items (s/map-of :multipart/param (s/or :file multipart/temp-file-part :visualisation string?)))
(s/def :visualisation/files (s/and (s/keys :req-un [:multipart/visualisation])
:multipart/items))
如何为具有特定键的地图定义规范,并为其他键定义值验证器?