1

Grails から PHP スクリプトに POST するために groovyx.net.http.HTTPBuilder を使用しています。いくつかのテキスト フィールドと多数のファイルを添付する必要があります。

この方法でいくつかのテキストフィールドを添付して、大成功を収めることができます。

    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:java.io.ByteArrayInputStream@2747ebcb, type:image/png]

HTTPBuilder でこのマルチパート POST を意図したとおりにするにはどうすればよいですか?

4

2 に答える 2

1

いくつかの考え:

  1. setEntity()リクエストを にリンクするために電話したのを覚えていますMultipartEntityか?
  2. 使用している Grails/Groovy のバージョンによっては、こちらで説明されている HTTPBuilder で問題が発生している可能性があります。そのリンクは、私が試していないパッチが適用されたフォークを指しています。
  3. これは Groovy ほどではありませんが、Apache HTTPClient Java API に密接に準拠したコードを使用して、Grails から同様のタスクを達成することができました。
于 2012-10-15T20:51:36.460 に答える
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'))
    
于 2012-10-16T13:38:13.830 に答える