Workato多部分表单请求为何将数组识别为文件?调用是否有误?
Workato多部分表单中数组被识别为文件的问题解析
问题背景
我尝试在POST多部分表单请求中,将数组作为哈希键的值发送,代码如下:
input = {"attribute" => ["Countries:India", "Category:Can"]} post("url") .request_format_multipart_form.payload(input)
该调用在Ruby HTTP及Postman中均可正常工作,但Workato处理后的表单数据和预期不符。
Postman生成的表单数据
----------------------------428750340837882951989223 Content-Disposition: form-data; name="attribute" Category:Test ----------------------------428750340837882951989223 Content-Disposition: form-data; name="attribute" Countries:India ----------------------------428750340837882951989223--
Workato生成的表单数据
------RubyFormBoundaryhokO7A27Xb6cdSEz Content-Disposition: form-data; name="attribute"; filename="attribute" Content-Type: Category:Can Countries:India ------RubyFormBoundaryhokO7A27Xb6cdSEz--
疑问:为何Workato会将数组识别为文件?还是调用方式有误?
原因及解决方案
原因
Workato的request_format_multipart_form方法对数组值的默认解析逻辑和标准HTTP客户端不同。它会把数组解析为文件上传结构:将数组第一个元素设为Content-Type,第二个元素作为文件内容,自动添加filename参数,最终导致数组被识别为文件。
解决方法
需要按照Workato的多部分表单数组规范构造参数,给每个数组元素显式指定content和name字段:
input = { "attribute" => [ { content: "Countries:India", name: "attribute" }, { content: "Category:Can", name: "attribute" } ] } post("url") .request_format_multipart_form.payload(input)
这样构造后,Workato会生成和Postman一致的表单数据——每个数组元素作为独立的form-data项,名称均为attribute,不会被识别为文件。
内容的提问来源于stack exchange,提问作者Krishna Krish
相关产品推荐
相关产品推荐

