cancel
Showing results for 
Search instead for 
Did you mean: 

upload de archivos desde java

kocoubb
Champ in-the-making
Champ in-the-making
Hola que tal.

Necesito realizar upload de archivos desde java a alfresco sin el uso de webservices, la idea es que sea a traves de webscripts utilizando conexiones httpclient, alguien tiene alguna idea al respecto???

gracias
4 REPLIES 4

pjcaracuel_2349
Confirmed Champ
Confirmed Champ
Buenas,

En este post, implementan lo mismo que tu pides.
http://forums.alfresco.com/en/viewtopic.php?f=36&t=20094

Saludos

eshu
Champ in-the-making
Champ in-the-making
Hola
Creo que puedo ayudarte.

CLIENTE JAVA DE ALFRESCO
Para poder hacerle llegar al webscript el fichero que quieres subir, vas a tener que emplear las clases que te pongo a continuación.

org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity (LA MAS IMPORTANTE)
org.apache.commons.httpclient.NameValuePair;
org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource;
org.apache.commons.httpclient.methods.multipart.FilePart;
org.apache.commons.httpclient.methods.multipart.Part;
org.apache.commons.httpclient.methods.multipart.StringPart;
org.apache.commons.httpclient.Credentials;

Ejemplo de código:
// Pasando el fichero, donde fichero es un FileItem
filePart = new FilePart("fichero", new ByteArrayPartSource("fichero", fichero.get());
filePart.setContentType(fichero.getContentType());
parts = filePart;

// Ejecutando una peticion con enctype="multipart/form-data"
multipartRequestEntity = new MultipartRequestEntity(parts, httpPost.getParams());
httpPost.setRequestEntity(multipartRequestEntity);

IMPORTANTE: Antes de lanzar la petición http, debes tener en cuenta lo siguiente
Al menos cuando se trabaja con tomcat, al lanzar una petición multipart como ésta, se exige el uso de credenciales contra el recurso invocado, es decir: Alfresco.
Tendrás que pasarle las credenciales a tu httpclient:
client = new HttpClient();
Credentials defaultcreds = new UsernamePasswordCredentials(USUARIO_ALFRESCO, PASSWOR_DALFRESCO);
client.getState().setCredentials(AuthScope.ANY, defaultcreds);
client.getParams().setAuthenticationPreemptive(true);

Ahora sí que sí que puedes lanzar la petición:
client.executeMethod(httpPost);

WEBSCRIPT DE ALFRESCO
Esto imagino que ya lo tendrás controlado, pero por si acaso:

// Obtencion del fichero
FileItemFactory factory = new DiskFileItemFactory(
     (new Integer(AplicacionProperties.getInstance().getProperty(ICtesBase.PROP_MAX_SIZETRESHOLD))).intValue(),
      new File(AplicacionProperties.getInstance().getProperty(ICtesBase.PROP_PATH_REPOSITORY)));

ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem>items = (List<FileItem>) upload.parseRequest(servletReq);

for (int i = 0; i < items.size(); i++)
{
     FileItem item = (FileItem) items.get(i);
    
     if ( item.isFormField() )
    {
          // Item de tipo simple: nombre-valor
          // Aqui capturarias el resto de parametros de la request, como el nombre del nodo contenido que se va a crear
         // y resto de valores para metadatos que te interesen
    }
    else
    {
         // Nos estan pasando un fichero
         FileItem ficheroEntrada = item;
        
        // VOLCADO DEL FICHERO, siendo nodo el nodo que has creado de tipo contenido para el fichero que se quiere subir
       String mimeType;
      
       if ( ficheroEntrada.getContentType().indexOf(";") > 0 )
       {
            mimeType = ficheroEntrada.getContentType().substring(0, ficheroEntrada.getContentType().indexOf(";"));
       }
       else
       {
            mimeType = ficheroEntrada.getContentType();
       }

        ContentWriter escritor = contentService.getWriter(nodo, ContentModel.PROP_CONTENT, true);
        escritor.setMimetype(mimeType);
        escritor.putContent(ficheroEntrada.getInputStream());
    }
}

Saludos y espero que te sirva de ayuda

berenicestr69
Champ in-the-making
Champ in-the-making
No me funciona lo de las credenciales para conectarme desde liferay con alfresco.

Le funciona a alguien??

angelsia
Champ in-the-making
Champ in-the-making
hola soy nueo en Alfresco y querria saber si se puede Cargar texto a un texto en un servidor alfresco para poder sobreescribirlo sin tener k subir el documento, es decir, se puede modificar al texto de un documento sin tener que subirlo. me refiero haciendolo desde java. Gracias