我正在尝试使用他们的 API 将数据上传到 CrowdFlower,为此我正在编写 JAVA 包装器。我正在使用 HttpClient Apache。
CrowdFlower 给出的 cURL 示例如下:
curl -T 'sampledata.xlsx' -H 'Content-Type: application/vnd.ms-excel' https://api.crowdflower.com/v1/jobs/upload.json?key={api_key}
这是我的代码:
public InputStream HTTPmethodPostUpload (String authKey, File file) throws ClientProtocolException, IOException{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost("https://api.crowdflower.com/v1/jobs/upload.json?key="+authKey);
MultipartEntity mpEntity = new MultipartEntity();
ContentBody cbody = new FileBody( file,"application/vnd.ms-excel");
mpEntity.addPart("sampledata.xlsx", cbody );
httpPost.setEntity(mpEntity);
HttpResponse response = httpclient.execute(httpPost);
HttpEntity entityResponse = response.getEntity();
return entityResponse.getContent(); }
但是它返回给我一个错误,并显示以下消息:
{不可接受的格式,内容类型必须是“格式”中列出的格式之一,但您发送了“multipart/form-data;boundary=yTuwTm4hWmnasxIMB9dC-sxdELIGoNJVudjJdCz””,“formats”:[“application/vnd.oasis” .opendocument.spreadsheet","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","application/vnd.ms-excel","text/csv","text/plain"]}}
我不太了解 Apache HttpClient,所以我不明白我的代码中的问题出在哪里。
你在java中的哪里设置了标题?
-H 'Content-Type: application/vnd.ms-excel'
尝试以下方法:
mpEntity.setContentType("application/vnd.ms-excel");