httpclient, httpmime 4.1.3
我正在尝试通过 http 将文件上传到远程服务器,但没有成功。
这是我的代码:
HttpPost method;
method = new HttpPost(solrUrl + "/extract");
method.getParams().setParameter("literal.id", fileId);
method.getParams().setBooleanParameter("commit", true);
MultipartEntity me = new MultipartEntity();
me.addPart("myfile", new InputStreamBody(doubleInput, contentType, fileId));
method.setEntity(me);
//method.setHeader("Content-Type", "multipart/form-data");
HttpClient httpClient = new DefaultHttpClient();
HttpResponse hr = httpClient.execute(method);
服务器是 Solr。
curl
这是为了替换一个像这样调用的工作 bash 脚本,
curl http://localhost:8080/solr/update/extract?literal.id=bububu&commit=true -F myfile=@bububu.doc
如果我尝试设置“Content-Type”“multipart/form-data”,接收部分会说没有边界(这是真的):
HTTP Status 500 - the request was rejected because no multipart boundary was found
如果我忽略此标头设置,服务器会发出一个错误描述,据我所知,该描述表明内容类型不是多部分 [2]:
HTTP Status 400. The request sent by the client was syntactically incorrect ([doc=null] missing required field: id).
这与 [1] 有关,但我无法从中确定答案。我在想,
我处于同样的情况,但不知道该怎么做。我希望 MultipartEntity 会告诉 HttpPost 对象它是多部分的、表单数据并且有一些边界,并且我不会自己设置内容类型。我不太明白如何为实体提供边界——MultipartEntity 没有像 setBoundary 这样的方法。或者,如何让我自己在 addHeader 中指定随机生成的边界 - 也没有 getBoundary 方法......
[1]使用 HttpClient4 上传文件时设置标题“Content-Type”的问题
[2] http://lucene.472066.n3.nabble.com/Updating-the-index-with-a-csv-file-td490013.html