2012-10-15 3 views
1

Grails에서 PHP 스크립트로 POST 할 때 groovyx.net.http.HTTPBuilder를 사용하고 있습니다. 몇 개의 텍스트 필드와 여러 개의 파일을 첨부해야합니다.HTTPBuilder 및 MultipartEntity를 사용하여 텍스트 및 파일 게시

내가 큰 성공을 몇 텍스트 필드이 방법을 첨부 할 수 있습니다

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

:이 같은 파일을 첨부 할 때 텍스트 필드가 더 요청에 이상 존재

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

을하지만, 나는 파일이 이런 식으로 추가되어야한다고 생각한다.

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

어떻게 내가 의도 한대로이 여러 부분 POST를 만들기 위해 HTTPBuilder가 발생할 수 있습니다 여기에 위에서 나의 추적은?

답변

0

Andrew의 의견으로 인해 HTTPClient Java API를 자세히 살펴 보았습니다. 위와 같이 모든 작업을 수행 할 수있었습니다.

  1. 스트림의 임시 복사본을 파일에 저장합니다.

    def file = new File('web-app/tmpfiles/file.dat').newOutputStream() 
    file << stream 
    file.close() 
    
  2. 대신 InputStreamBody을 사용, 저장된 파일의 경로와 파일 바디를 사용합니다.

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

몇 가지 생각 :

  1. 당신은 당신의 MultipartEntity와 요청을 연결하는 setEntity() 전화를 기억나요?
  2. 사용중인 Grails/Groovy의 버전에 따라 here으로 설명 된 HTTPBuilder에서 문제가 발생할 수 있습니다. 그 링크는 내가 시험하지 않은 패치 포크를 가리킨다.
  3. Groovy보다 작지만 Apache HTTPClient Java API에 밀접하게 연관된 코드로 Grails에서 비슷한 작업을 수행 할 수있었습니다.
+0

1 예는 - 확실히() 2. 나는 실제로 것을 시도했다 setEntity 전화를해야 인해 내 자신의 경험 부족 3. 감사 나에게 dependecies에 많은 문제를 야기 포크! Groovy는 Java에 불과하다는 것을 상기 시켰습니다. –

관련 문제