我正在尝试将等效的curl'-F'选项发送到指定的网址。
这是使用Curl的命令:
curl -F"optionName=cool" -F"file=@myFile" http://myurl.com
我相信我在Apache httpcomponents库中使用HttpPost类是正确的。
我提供了name = value类型的参数。 optionName只是一个字符串,'file'是我本地存储在我的驱动器上的文件(因此@myFile表示它的本地文件)。
如果我打印响应,我会收到HTTP 500错误...我不确定是什么原因引起了这个问题,因为服务器在使用上面提到的Curl命令时应该响应。在查看下面的代码时,我是否有一些简单的错误?
HttpPost post = new HttpPost(postUrl);
HttpClient httpClient = HttpClientBuilder.create().build();
List<BasicNameValuePair> nvps = new ArrayList<BasicNameValuePair>();
nvps.add(new BasicNameValuePair(optionName, "cool"));
nvps.add(new BasicNameValuePair(file, "@myfile"));
try {
post.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
HttpResponse response = httpClient.execute(post);
// do something with response
} catch (Exception e) {
e.printStackTrace();
}
答案 0 :(得分:1)
尝试使用MultipartEntity
代替UrlEncodedFormentity
来处理参数和文件上传:
MultipartEntity entity = new MultipartEntity();
entity.addPart("optionName", "cool");
entity.addPart("file", new FileBody("/path/to/your/file"));
....
post.setEntity(entity);
修改强>
MultipartEntity
已弃用,FileBody
构造函数需要File
,而不是String
,因此:
MultipartEntityBuilder entity = MultipartEntityBuilder.create();
entity.addTextBody("optionName", "cool");
entity.addPart("file", new FileBody(new File("/path/to/your/file")));
....
post.setEntity(entity.build());
谢谢@CODEBLACK。