我一直在使用rest-client-builder插件(http://grails.org/plugin/rest-client-builder)并遇到问题,将文件作为inputStream对象发送。
来自插件文档:
通过将请求主体的属性设置为File,URL,byte []或InputStream实例,可以实现多部分请求:
def resp = rest.post(url) {
contentType "multipart/form-data"
zip = new File(pluginPackage)
pom = new File(pomFile)
xml = new File(pluginXmlFile)
}
我的代码:
def post(String url, InputStream photo, String contentType, Cookie[] cookies = null) {
def rest = new RestBuilder()
def cookiesHeaderString = ""
if (cookies) {
cookiesHeaderString = WebUtils.buildCookiesHeader(cookies)
}
def resp = rest.post(url) {
header "Cookie", cookiesHeaderString
file = photo
contentType "multipart/form-data"
}
return resp?.responseEntity?.body
}
有人可以建议我如何发送一个InputStream对象或者我做错了什么?
答案 0 :(得分:1)
对于File类型,我们需要在RequestCustomizer上设置“file”属性。以下代码对我有用。
File myFile = new File("myFile.txt")
def restResponse = rest.post(url) {
header headerName, headerValue
contentType "multipart/form-data"
setProperty "file", myFile
}
答案 1 :(得分:0)
我知道我这个答案已经很晚了,但我一直在寻找答案,似乎没什么用。所以,通过反复试验我终于找到了答案,所以想在这里发帖。
RestTemplate restTemplate=new RestTemplate()
restTemplate.setRequestFactory(new HttpComponentsClientHttpRequestFactory());
def restBuilder=new RestBuilder(restTemplate)
File f = new File("C:/Users/USER/Documents/hello.txt")
MultiValueMap<String, File> form = new LinkedMultiValueMap<String, File>()
form.add("fileUpload", f)
return client.post(path) {
auth('ngtest1', 'ngtest1')
header :['contentType':"multipart/form-data"]
setProperty "fileUpload", f
body (form)
}
这对我有用。我在我的应用程序中将名称命名为'fileUpload'。希望这会有所帮助。