0

Play フレームワークでファイルのアップロードをどのようにシミュレートできますか? つまり、次のような curl コマンドを使用してサーバーにファイルをアップロードできます: curl -k -v -H "X-Agile-Authorization: token" -F uploadFile=c:\1.txt -F directory=/testpost -F basename= 1.txt https://api/post/ファイル

curl または browser in play フレームワークなしでどうすれば同じことができますか。目的は、あるサーバーから別のサーバーにファイルをアップロードすることです。

4

4 に答える 4

3

現在、WS API を介して multipart/form-data を投稿することはできません。

File は簡単に送信できますが、フォームは送信できません...回避策は、 Apache Http ClientWS.url(myUrl).post(myFile)などの別のライブラリを使用することです。

Play メーリング リストでこのトピックを確認してください: [2.0] multipart/form-data in WS POST

于 2013-01-14T20:30:39.027 に答える
1

WindowsAzureStorageまたはAmazonS3REST APIを確認し、同様のアプローチを使用して、 PlayのWebServicesAPIでファイルを送信できます

POSTまたはPUTリクエストを作成して送信するだけです。おそらく、両方のアプリ間の認証や承認を自分で気にする必要があります(API WindowsとAmazonの両方がこのタスクにHMACを使用します)

于 2013-01-14T20:25:02.467 に答える
1

次の例では、投稿できますmultipart/form-data。これは値のみで機能する単純なバージョンですが、String他のタイプのデータを使用するように簡単に変更できます。

type NameValuePair = (String, String)
case class MultipartFormData(elements: Seq[NameValuePair], boundary: String)(
  implicit codec: Codec) {

  private val HTTP_SEPARATOR = "\r\n"
  private val actualBoundary = "--" + boundary
  private val endBoundary = actualBoundary + "--" + HTTP_SEPARATOR

  private val contentType = "multipart/form-data; boundary=" + boundary
  private val content = elements.map(toPart).mkString + endBoundary

  val body = Body(content)

  case class Body(content: String)

  object Body {
    implicit val contentTypeOf:ContentTypeOf[Body] =
      ContentTypeOf(Some(contentType))
    implicit val writes: Writeable[Body] =
      Writeable(body => codec.encode(body.content))
  }

  private def toPart(nameValuePair: NameValuePair) = {
    val (name, value) = nameValuePair
    actualBoundary + HTTP_SEPARATOR +
      "Content-Disposition: form-data; name=\"" + name + "\"" + HTTP_SEPARATOR +
      HTTP_SEPARATOR +
      value + HTTP_SEPARATOR
  }
}

使い方はこんな感じです。

val data = MultipartFormData(formFields, "asdfghjkl123")

WS.url(myUrl).post(data.body)
于 2013-11-25T21:21:58.423 に答える