dispatch-mimeを使うとmultipart/form-data形式でPOSTができるのですが、普通に実装するとContent-Lengthを送ってくれないようです。
ソースコメントにも書いてあるし。
Note that when using an InputStream generator, chuncked encoding will be used with no Content-Length header
Fileが引数の方を使えば良さげだけどGAEからだとFile使えません。dispatchのソースとapache-httpclientのjavadoc眺めて工夫したらできました。
import dispatch._ import dispatch.Http._ import dispatch.mime.Mime._ import org.apache.http.entity.mime.content.ByteArrayBody var req = ... //普通にdispatchのRequest作る req = req next req.add(paramName, new ByteArrayBody(data, contentType, filename)) //ByteArrayBodyを指定
※ただし、ByteArrayBodyはhttpclient 4.1(現在BETA1)から追加されるクラスなので4.1のjarを使わないとダメ(dispatch 0.7.8のdependencyはhttpclient 4.0になってた)。
sbtならこんな感じで。
val httpmime = "org.apache.httpcomponents" % "httpmime" % "4.1-beta1"
0 件のコメント:
コメントを投稿