计算机视觉OCR API返回HTTP响应:Java HTTP请求的不支持的媒体类型



我正在向MS ccomputer Visions API提出OCR POST请求,并返回依据:http/1.1 415未支撑的媒体类型[CACHE-CORTOR:cACHE-CONTROL:no-CACHE,pragma,pragma:no Cache:non-Cache,内容长度:183,内容类型:应用程序/JSON;等,等等

这是我的Java代码,在请求中添加了多片(JPG),然后发布。

HttpClient httpClient = HttpClientBuilder.create().build();
    String fileContentType = file.getContentType();
    URI uri = buildUri();
    if(uri == null){
        //throw some exception
    }
    HttpPost request = new HttpPost(uri);
    request.setHeader("Content-Type", fileContentType);
    request.setHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
    MultipartEntityBuilder mpEB = MultipartEntityBuilder.create();

    InputStream fileInputStream = file.getInputStream();
    //modify method to add filename if later need arises
    //link: https://memorynotfound.com/apache-httpclient-multipart-upload-request/
    mpEB.addBinaryBody("image", fileInputStream);
    mpEB.setContentType(ContentType.MULTIPART_FORM_DATA);
    HttpEntity image = mpEB.build();
    request.setEntity(image);
    HttpResponse response = httpClient.execute(request);
    HttpEntity entity = response.getEntity();
    System.out.println(json.toString());
    //dataFromJsonExtractor.extractData(json);
}
private URI buildUri(){
    URI link = null;
    try {
        URIBuilder builder = new URIBuilder(uriBase);
        builder.setParameter("language", "de");
        URI uri = builder.build();
        link = uri;
        }catch (URISyntaxException e){
        logger.debug("Computer Vision API URL Builder creation error: " + e);
    }
    return link;
}

有帮助吗?欢呼!

,如果您只将单个图像有效载荷发布到邮局,而不是构造多部分MIME主体,那将变得更简单,因为您只能一次发布一个图像反正。代码看起来像这样:

public static void run(FileDataSource file) throws Exception
{
    HttpClient httpClient = HttpClientBuilder.create().build();
    URI uri = buildUri();
    HttpPost request = new HttpPost(uri);
    request.setHeader("Ocp-Apim-Subscription-Key", subscriptionKey);
    HttpEntity entity = EntityBuilder
        .create()
        .setStream(file.getInputStream())
        .setContentType(ContentType.APPLICATION_OCTET_STREAM)
        .build();
    request.setEntity(entity);
    HttpResponse response = httpClient.execute(request);
    HttpEntity jsonEntity = response.getEntity();
    System.out.println(EntityUtils.toString(jsonEntity));
}

请注意,API期望application/octet-stream是内容类型,而不是image/*

最新更新