我正在读文件放置 https://www.dropbox.com/developers/core/docs#files_putDropbox API 的文档。
他们使用的 URL 路径是:https://api-content.dropbox.com/1/files_put/<root>/<path>?param=val
请求正文保存文件:
required 需要上传的文件内容。由于整个 PUT 主体
将被视为文件,任何参数都必须作为文件的一部分传递
请求网址。请求 URL 应按照您的方式进行签名
签署任何其他 OAuth 请求 URL。
问题
我很想知道这种类型的请求的内容类型是什么? (请求体中的文件和url字符串中的参数)
如何模仿这个 API 功能?特别是在 Grails 控制器中。像这样的东西。
如何测试这种类型的请求cURL
Update:我找到了如何用curl来测试这个here https://github.com/andreafabrizi/Dropbox-Uploader/blob/master/dropbox_uploader.sh#L218.
对于控制器我设想的是这样的
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
现在。但我没有什么可以给你的,我也将在我的个人机器上尝试同样的事情。
-
如何使用curl进行文件上传? (@source - cURL 文档)
4.3 文件上传POST
早在 1995 年末,他们就定义了另一种通过 HTTP 发布数据的方法。它
RFC 1867 中有记录,为什么此方法有时被称为
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>
这清楚地表明即将发送的Content-Type是
多部分/表单数据。
要使用curl发布到这样的表单,您可以输入如下命令行:
curl --form upload=@localfilename --form press=OK [URL]
-
W3C 规范
查看 W3C 规范here http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4和RFC1867 http://www.faqs.org/rfcs/rfc1867.html对于多部分/表单数据
-
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
}
它可能不是完整的证据,但它应该没有我想象的那么复杂。今天我也想尝试一下。有用的帖子 https://stackoverflow.com/questions/5180375/sending-and-receiving-binary-data-in-servlets看看。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)