什么内容类型做的Dropbox(文件PUT)API使用? 以及如何模仿呢?(What conte

2019-09-03 13:29发布

我正在读files_put对Dropbox的API文档。

他们使用的URL路径是: https://api-content.dropbox.com/1/files_put/<root>/<path>?param=val和请求体保存文件:

所需的文件内容被上传。 因为整个PUT体将作为文件进行处理,任何参数都必须作为请求URL的一部分进行传递。 请求URL应当签字就像你签署任何其他的OAuth请求URL。

问题

  • 我很好奇,想知道什么是内容型这种类型的请求? (文件中请求本体和参数在URL字符串)

  • 这个API功能如何能够模仿? 特别是在一个Grails控制器。 事情是这样的。

  • 如何将这种类型的要求,测试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`
  }

Answer 1:

REST控制台不必在请求体发送二进制数据的能力。 不幸的是,我无法访问curl现在。 但我对你投入少,而我也要去尝试同样在我个人的机器。

  • 如何使用卷曲文件上传? (@source - 卷曲文档)

    4.3文件上传POST

    早在1995年底,他们定义了另一种方式通过HTTP POST数据。 它在1867年的RFC,为什么这种方法有时被称为RFC1867过帐记录。

    这种方法主要是为了更好地支持文件上传。 一个表单,允许上传文件的用户可以在HTML中这样写:

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

    这清楚地表明内容类型将要被发送是多部分/格式的数据。

    如果要在这样的卷曲形式,你输入一个命令行,如:

      curl --form upload=@localfilename --form press=OK [URL] 
  • W3C规范

    看一看W3C规范在这里和RFC1867的multipat / form-data的

  • 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 
}

它可能不是充分证明,但它应该是比我想象的要那么复杂。 我今天一样去尝试。 有用的帖子看看。



文章来源: What content-type does dropbox (file put) api uses? and How to mimic it?