我必须上传一个文件到一个API。但现在我想通过MuleSoft调用这个curl命令,我们该怎么做呢?我试过通过Execute组件(通过Groovy引擎),但文件正在被加载,控制台日志中也没有错误。
CURL COMMANDcurl -H "apiAccessKeyId:USERNAME" -H "apiSecretAccessKey:PASSWORD" -H "Accept:applicationjson" --form "file=@C:\Files\medialist.csv" --form "params={Type:Import}" -X POST http:/mysuperservisormediaupload
请提供建议?
你不应该尝试从Mule应用程序中执行curl命令。我强烈不鼓励这样做。相反,你应该使用Mule组件和连接器来重现相同的请求。
对于这种特定的情况,你可以使用文件连接器来读取文件,使用DataWeave转换来生成带有附件的多部分表单数据请求,使用HTTP请求连接器来发送相同的请求,并重现与curl执行相同的HTTP请求。
例如,在XML视图中,它看起来类似于这样。
<flow name="so-file-http-request-sendFlow">
<file:read doc:name="Read" path="c:\files\medialist.csv"/>
<ee:transform doc:name="Transform Message">
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output multipart/form-data
---
{
parts : {
params : {
headers : {
"Content-Type": "text/plain"
},
content : "{Type=import}"
},
file : {
headers : {
"Content-Disposition" : {
"name": "file",
"filename": "medialist.csv"
},
"Content-Type" : "application/csv"
}
}
}
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<http:request method="POST" doc:name="Request" config-ref="HTTP_Request_configuration" path="/media/upload/">
<http:headers ><![CDATA[#[output application/java
---
{
Accept : "application/json",
apiAccessKeyId : "USERNAME",
apiSecretAccessKey : "PASSWORD"
}]]]></http:headers>
</http:request>
</flow>
你可以使用 HTTP线程记录 来查看该请求是否与CURL发送的内容匹配。