无法使用grails rest-client-builder发送InputStream对象

时间:2013-09-12 17:29:17

标签: rest grails grails-plugin

我一直在使用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对象或者我做错了什么?

2 个答案:

答案 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'。希望这会有所帮助。