2

Dropbox APIのfiles_putドキュメントを読んでいました。

使用する URL パスは次のとおりです。https://api-content.dropbox.com/1/files_put/<root>/<path>?param=valリクエストの本文はファイルを保持します。

必須 アップロードするファイルの内容。PUT ボディ全体がファイルとして扱われるため、すべてのパラメーターをリクエスト URL の一部として渡す必要があります。リクエスト URL は、他の OAuth リクエスト URL に署名するのと同じように署名する必要があります。

質問

  • このタイプのリクエストの content-type は何ですか? (リクエスト本文のファイルと URL 文字列のパラメータ)

  • この API 機能をどのように模倣できますか? 具体的には、Grails コントローラーで。このようなもの。

  • このタイプのリクエストはcURL Updateでどのようにテストされますか: curl でこれをテストする方法はこちらでわかりました。

コントローラの場合、私はこのようなものを想像しました

  def save () {
    withFormt {
      html {actForHTML}
      <something> {actForREST}
    }
  }

  def actForREST () {
     //how can I get access to the file? I guess url parameters can be accessed by `params`
  }
4

1 に答える 1

1

REST コンソールには、要求本文でバイナリ データを送信する機能がありません。残念ながら、curl現在アクセスできません。しかし、私はあなたのための情報をほとんど持っていません。私の個人用マシンでも同じことを試してみます。

  • ファイルのアップロードにcurlを使用するには? (@source - cURL ドキュメント)

    4.3 ファイルアップロード POST

    1995 年後半に、彼らは HTTP 経由でデータを送信する追加の方法を定義しました。RFC 1867 で文書化されているため、この方法が RFC1867-posting と呼ばれることがあります。

    この方法は、主にファイルのアップロードをより適切にサポートするように設計されています。ユーザーがファイルをアップロードできるようにするフォームは、HTML で次のように記述できます。

    <form method="POST" enctype='multipart/form-data' action="upload.cgi">
      <input type=file name=upload>
      <input type=submit name=press value="OK">
    </form>
    

    これは、送信しようとしている Content-Type が multipart/form-data であることを明確に示しています。

    curl を使用してこのようなフォームに投稿するには、次のようなコマンド ラインを入力します。

        curl --form upload=@localfilename --form press=OK [URL]
    
  • W3C 仕様

    こちらの W3C 仕様とmultipat/form-dataのRFC1867をご覧ください。

  • リクエストを処理する Grails コントローラー

    あなたのアプリはそれを処理できるはずですmultipart/form-data(MIME タイプの追加は必要ないと思います)。コントローラーでのアクションは次のようになります。

例えば:

def uploadFileAndGetParams(){
    def inputStream = request.getInputStream()
    byte[] buf = new byte[request.getHeaders().CONTENT_LENGTH] //Assuming
    //Read the input stream
    for (int chunk = inputStream.read(buf); chunk != -1; chunk = is.read(buf)){
        //Write it any output stream
        //Can refer the content-type of the file (following W3C spec)
        //and create an Output stream accordingly
    }

    //Get the params as well
    //params.foo //params.bar 
}

完全な証明ではないかもしれませんが、私が思っていたよりも複雑ではないはずです。今日も同じようにしてみます。見るのに役立つ投稿

于 2013-05-16T18:10:00.297 に答える