REST API:InputStream 复制(吻合)大文件失败

REST API: InputStream Copying (dovetailing) Failing for Big Files

我正在使用 Jersey 1.8 开发 REST API 来上传文件。反过来,我使用服务提供商 REST API 将文件上传到他们的站点。流程如下所示:

浏览器 --> 我的 REST 使用 Jersey 服务器端;然后使用 Apache HTTP 客户端进行后续 REST 调用 --> 服务提供商的 REST。

当我上传小文件 (<1MB) 时,一切正常。但是当文件大小增加时,它会给我以下错误。

A JSONObject text must begin with '{' at character 0

我怀疑错误是由于流 "cut" 中途造成的。以下代码片段有什么问题(我已经删除了不相关的代码)。

@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadDocument(@FormDataParam("document") InputStream inputStream) {
        FilenetAdapter filenet = new FilenetAdapter();
        String documentId = filenet.uploadDocument(inputStream);
        // return the Jersey call - code removed for bravity
}

//FilenetAdapert.uploadDocument function
public String uploadDocument(InputStream inputStream) {

    HttpPost request = new HttpPost(serviceUrl);
    request.setEntity(buildMultipartEntity(metadata, inputStream));

    CloseableHttpClient client = HttpClientBuilder.create().build();
    CloseableHttpResponse response = client.execute(request);
    //consume the response - code removed for bravity
}

private HttpEntity buildMultipartEntity(JSONObject metadata, InputStream inputStream)
        throws IOException, URISyntaxException, JSONException {

    // Build a multipart HTTP request according to RFC1341
    MultipartEntityBuilder builder = MultipartEntityBuilder.create();

    // Set request metadata
    StringBody stringBody = new StringBody(metadata.toString(), ContentType.TEXT_PLAIN);
    FormBodyPartBuilder bodyPartBuilder = FormBodyPartBuilder.create();
    bodyPartBuilder.setName("metadata");
    bodyPartBuilder.setBody(stringBody);
    FormBodyPart mdata = bodyPartBuilder.build();
    builder.addPart(mdata);

    // Set request content
    ContentBody cbFile = new InputStreamBody(inputStream, ContentType.APPLICATION_OCTET_STREAM);
    builder.addPart("file", cbFile);
    return builder.build();
}

服务提供商更改了他们的服务器配置。这解决了问题。