cancel
Showing results for 
Search instead for 
Did you mean: 

REST-API Upload files bigger than 2MB error

dpardell
Champ on-the-rise
Champ on-the-rise

Hola,

estoy haciendo llamadas a la url:

   http://*****:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/{nodeId}/content?include=path

os paso el trozo de codigo donde hago la llamada:

   HttpPut httpPut = new HttpPut(****url anterior****);
   ByteArrayEntity byteArrayEntity = new ByteArrayEntity(content); // content es el array de bytes
   httpPut.setEntity(byteArrayEntity);
   httpPut.setHeader("Accept", "application/octet-stream");
   httpPut.setHeader("Content-type", "application/octet-stream");
   CloseableHttpResponse responseContent = client.execute(httpPut);

al hacer esta llamada si el fichero que paso es de menos de 2 MB me guarda el fichero correctamente, si el fichero  supera los 2 MB se queda pensando, sin mostrar ningún error en el log y no me devuelve ninguna excepción.

he pensado que no fuera una regla que tengo activada para que me genere los pdf's de los documentos que subo, pero al desactivarla tampoco me funciono.

He revisado la configuración del alfresco y no veo nada raro.

   

Saludos

3 REPLIES 3

angelborroy
Community Manager Community Manager
Community Manager

No parece que sea un problema de Alfresco sino de cliente (Apache HttpClient, entiendo por tu código).

¿Has probado a realizar la misma invocación con Postman o algún software similar? Así descartarías que sea debido a una configuración de Alfresco.

Hyland Developer Evangelist

dpardell
Champ on-the-rise
Champ on-the-rise

Hola,

      No he probado con ninguno, al final he modificado toda la función y ya me ha funcionado.

      Lo que se hacia aquí era primero crear del documento sin contenido y después un update para añadir el documento (era esta funciona que me fallaba), ahora lo       que he hecho es lo siguiente:

         CloseableHttpClient client = HttpClientBuilder.create().setDefaultCredentialsProvider(provider).build();

         HttpPost httpPost = new HttpPost(instance + "/nodes/" + folderNode.getEntry().getId() + "/children");

         File tempFile = File.createTempFile(name, ".tmp");
         tempFile.deleteOnExit();
         FileOutputStream out = new FileOutputStream(tempFile);
         IOUtils.copy(new ByteArrayInputStream(content), out);
         FileBody fileBody = new FileBody(tempFile, ContentType.DEFAULT_BINARY, name);
         MultipartEntityBuilder builder = MultipartEntityBuilder.create();
         builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
         builder.addPart("filedata", fileBody);
         HttpEntity multipart = builder.build();
         httpPost.setEntity(multipart);

         CloseableHttpResponse response = client.execute(httpPost);
         String stringResponse = EntityUtils.toString(response.getEntity());
         ObjectMapper mapper = new ObjectMapper();
         NodeResponse newDocument = mapper.readValue(stringResponse, NodeResponse.class);

   con esta modificación con una llamada lo hago todo y he realizado pruebas con ficheros de hasta 46MB y me ha funcionado.

Saludos

Confirmado, entonces era problema de tu código.

Gracias por el feedback.

Hyland Developer Evangelist