2016-11-03 48 views
0

使用Jersey 1.8,我正在开发一个REST API来上传文件。反过来,我正在使用服务提供者REST API将文件上传到他们的网站。流程如下所示:REST API:InputStream复制(dovetailing)大文件失败

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

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

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

我怀疑这个错误是由于流在中途被“切断”。下面的代码片段有什么问题(我已经删除了不相关的代码)。

@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(); 
} 
+0

请忽略我使用Jersey进行服务器端休息和Apache HTTPClient进行客户端调用的事实。我会在有空的时候修改它。可能我会用泽西的两个。 –

+0

超过最大发布数据大小?异常来自哪里?将数据从客户端上传到您自己的服务器或将数据从服务器上传到服务提供商的REST。 – David

+0

将数据从我的服务器上传到服务提供商的REST –

回答

0

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