我正在使用Java服务器在以下URL上公开RESTful API:
http://localhost:8080/my-server/
文档建议使用curl提交简单的PUT请求(文件上传),并强烈建议用户使用与示例中提供的完全相同的参数.所有示例都如下所示:
curl -X PUT -f -u admin:password --data-binary @/absolute/path/file/to/upload/file.ext "http://localhost:8080/my-server/file.ext"
此服务器无法使用FTP或任何其他正常传输协议.
我在SO上发现了this问题,答案者建议使用java.net.URL及其配套java.net.URLConnection而不是尝试使用curl / libcurl.
我以前从未运行过curl命令,所以我问任何知道curl和Java的人,如果可以使用URL / URLConnection(或任何其他Java框架)而不是curl来解决我的特定问题.如果没有,那么我将编写一个从本地命令行/终端执行命令的组件,然后在该组件内执行上面的curl命令,这只是感觉丑陋/讨厌.
如果我可以在Java网络API中完成同样的事情,我宁愿这样做.
并且,如果它可以用Java完成,我将如何使用URL / URLConnection来设置与我提供的示例完全相同的命令参数?特别:
> -X
> PUT
> -f
> -u admin:密码
> –data-binary
> – @ absolute / path / …
在此提前感谢您的任何见解或在正确的方向上轻推!
解决方法:
我相信使用Java和httpclient-4.x这或多或少相当:
try {
Credentials credentials = new UsernamePasswordCredentials("admin", "password"); //-u admin:password
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials);
HttpPut put = new HttpPut("http://localhost:8080/my-server/file.ext"); //-X PUT
put.setEntity(new FileEntity(new File("/absolute/path/file/to/upload/file.ext"), "image/png")); //@ - absolute path
httpClient.execute(put);
} catch(Exception e) {
//-f, fail silently
}