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