我正在读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`
}
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
}
它可能不是充分证明,但它应该是比我想象的要那么复杂。 我今天一样去尝试。 有用的帖子看看。