2012-10-15 37 views
1

我使用groovyx.net.http.HTTPBuilder從Grails發佈到PHP腳本。我需要附上幾個文本字段和一些文件。使用HTTPBuilder和MultipartEntity發佈文本和文件

我可以附加一些文本框的大獲成功是這樣的:

MultipartEntity mpc = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE) 
    mpc.addPart("json", new StringBody(json.toString())) 

但是,當我附上一個文件,這樣,該文本框不再出現在請求:

 passFiles.each() { key, value -> 
      mpc.addPart(key, new InputStreamBody(value.stream, value.type, value.filename)) 
      System.out << value 
     } 

我認爲該文件應該可以添加這種方式。這裏是我的痕跡從上面:

[filename:icon.png, stream:[email protected], type:image/png]

我怎樣才能使HTTPBuilder使這個多部分POST如預期?

回答

0

Andrew的評論讓我更好地瞭解了HTTPClient Java API。我能夠像上面那樣使所有的工作都像這樣:

  1. 保存流的臨時副本到文件。

    def file = new File('web-app/tmpfiles/file.dat').newOutputStream() 
    file << stream 
    file.close() 
    
  2. 而不是使用InputStreamBody的,使用FileBody與路徑保存的文件。

    mpc.addPart(key, new FileBody(new File('web-app/tmpfiles/file.dat'), filename, type, 'UTF-8')) 
    
1

的一點想法:

  1. 你記得打電話setEntity()鏈接您的要求與您MultipartEntity
  2. 根據您使用的Grails/Groovy的版本,您可能會遇到HTTPBuilder中的問題,描述爲here。該鏈接指向修補的叉子,我還沒有嘗試過。
  3. 它不如Groovy,但我已經可以用Grails來完成類似的任務,代碼緊密貼合Apache HTTPClient Java API。
+0

1.是 - 肯定是要調用setEntity()2。我實際上已經試過了叉,這引起了我很多與依賴條件問題,是由於我自己的經驗不足3.感謝!你提醒我Groovy只是Java。 –

相關問題