Visualizar archivos desde una aplicacion Java

cancel
Showing results for 
Search instead for 
Did you mean: 
vochoa
Member II

Visualizar archivos desde una aplicacion Java

Hola a todos:
Tenemos una aplicación web que se conecta a Alfresco para realizar diversas acciones tales como grabar, visualizar, eliminar y reemplazar archivos.
Todas las opciones las realiza sin problemas, el único inconveniente que tenemos es que cuando deseamos visualizar un archivo desde una máquina que se encuentra en la red interna el archivo se visualiza sin problemas ya que alfresco lo hace a traves de la ruta \\ip servidor local\ruta, el problema viene cuando esta aplicación accedida desde fuera de la red interna, ya que para visualizar el archivo el sistema buscará la ruta del servidor interno el cual tiene una ip privada y no píublica por lo tanto los usuarios que realizan la consulta no pueden visualizar el archivo.
Es por ello que necesitamos saber que función podríamos utilizar o cual es la que han utilizado otras personas sin que esto nos oblige a publicar hacia internet nuestro servidor alfresco ya que por motivos de seguridad no es recomendable.

Espero me puedan ayudar

Gracias

Vannessa
7 Replies
baskeyfield
Member II

Re: Visualizar archivos desde una aplicacion Java

Buenas,

Si la aplicación que se conecta a Alfresco, y Alfresco, se encuentran en la misma red, y las máquinas son accesibles entre ellas, no debería haber problema desde donde se conectase la máquina cliente aunque Alfresco tuviese ip privada (siempre y cuando la aplicación que se conecta a Alfresco tenga ip publica).

Si el problema está en que la máquina cliente  lee rutas del tipo \\ServidorAlfresco\… (que supongo se las ofrecerá la Aplicación de conexión con Alfresco) la solución podría ser utilizar alguna de las apis que ofrece Alfresco, por ejemplo la de SW.

Un Servlet (que se encontraría en la misma red que Alfresco, pero que tiene ip pública) utiliza SW para recuperar contenidos de Alfresco y mostrárselos al usuario. Sería una especie de pasarla.

Saludos.
vochoa
Member II

Re: Visualizar archivos desde una aplicacion Java

Hola Baskeyfield
Muchas gracias por tu pronta respuesta.
Podrías indicarme donde podría encontrar más información acerca de la API SW a la que haces referencia?

Nuevamente muchas gracias por tu ayuda.

Vannessa
baskeyfield
Member II

Re: Visualizar archivos desde una aplicacion Java

Buenas!

Puedes encontrar más información del api de Servicios Web de Alfresco aquí:

http://wiki.alfresco.com/wiki/Alfresco_Content_Management_Web_Services

En definitiva, solo tienes que crear clientes de servicios web, que se conectan a Alfresco y realizan las operaciones deseadas. Aquí te dejo unos ejemplos de clientes:

http://wiki.alfresco.com/wiki/Web_Service_Samples_for_Java

Lo ideal para empezar a trabajar es que te descargues el SDK y empieces a echarle un vistazo a los clientes:

http://wiki.alfresco.com/wiki/Alfresco_SDK_3.4

Un saludo.
vochoa
Member II

Re: Visualizar archivos desde una aplicacion Java

Hola, ya tengo creado un cliente de servcios web que se conecte a alfresco atravez del Web Service Client 3.3, mi problema esta en que necesito hacer una vista previa del documento pdf subido(un download) pero el aplicativo estara en una ip publica y al servidor alfresco no puedes estarlo por motivos de seguridad, entonces al momento que aplico una funcion llamada node.getDownloadURL devuelve un String como “http://{ip_server_alfresco}/alfresco/spaceStore/{codigodelSpace}/nombreArchivo.pdf” en mi red local lo veo sin problemas pero cuando ingreso al aplicativo desde cualquier otra red, no lo puedo visualizar y es porque el browse no encuentra la URL obviamente, que alternativas de modificacion del metodo "getDownLoadURL" puedo tener para ver dicho contenido? la mas sencilla y rapida posible. Gracias por su atencion. Adjunto el codigo

import java.util.ArrayList;
import java.util.Arrays;
import org.alfresco.webservice.content.Content;
import org.alfresco.webservice.types.NamedValue;
import org.alfresco.webservice.types.Node;
import org.alfresco.webservice.types.ResultSetRow;
import org.apache.commons.lang.ArrayUtils;

/**
*
* @author czela
*/
public class AlfrescoFile extends AlfrescoNode {

    private String mimetype;
    private String iconUrl;
    private String downloadUrl;

    public AlfrescoFile() {
    }

   
    public AlfrescoFile(Node node, Content content) {
        super(node);
        this.mimetype = content.getFormat().getMimetype();
        this.downloadUrl = content.getUrl();

    }

    public AlfrescoFile(ResultSetRow resultRow) {
        super(resultRow);
        for (NamedValue value : resultRow.getColumns()) {
            if (value.getName().endsWith("mimetype")) {
                this.mimetype = value.getValue();
            }
        }
    }

    /**
     * @return the mimetype
     */
    public String getMimetype() {
        return mimetype;
    }

    /**
     * @param mimetype the mimetype to set
     */
    public void setMimetype(String mimetype) {
        this.mimetype = mimetype;
    }

    /**
     * @return the iconUrl
     */
    /**
     * @param iconUrl the iconUrl to set
     */
    public void setIconUrl(String iconUrl) {
        this.iconUrl = iconUrl;
    }

    /**
     * @return the downloadUrl
     */
    public String getDownloadUrl() {
        return downloadUrl;
    }

    /**
     * @param downloadUrl the downloadUrl to set
     */
    public void setDownloadUrl(String downloadUrl) {
        this.downloadUrl = downloadUrl;
    }

    public String getIconUrl() {
        if (this.iconUrl == null || this.iconUrl.equals("")) {
            ArrayList<String> validIcon = new ArrayList<String>(Arrays.asList("_default.gif acp.gif asf.gif avi.gif bmp.gif csv.gif doc.gif docx.gif eml.gif exe.gif ftl.gif gif.gif htm.gif html.gif jp2.gif jpeg.gif jpe.gif jpg.gif jpm.gif jpx.gif js.gif lnk.gif mp2.gif mp3.gif mp4.gif mpeg.gif mpg.gif msg.gif odf.gif odg.gif odp.gif ods.gif odt.gif pdf.gif png.gif ppt.gif pptx.gif psd.gif rtf.gif shtml.gif swf.gif tiff.gif tif.gif txt.gif url.gif wmv.gif wpd.gif xdp.gif xls.gif xml.gif xsd.gif xsl.gif zip.gif".split(" ")));
            String[] split = this.getName().split("\\.");
            this.iconUrl = validIcon.get(0);
            String extension = null;
            if (split != null && split.length > 0) {
                extension = split[split.length - 1];
                if (ArrayUtils.contains(validIcon.toArray(), extension.toLowerCase() + ".gif")) {
                    this.iconUrl = (String) validIcon.get(ArrayUtils.indexOf(validIcon.toArray(), extension.toLowerCase() + ".gif"));
                }
            }
        }
        return this.iconUrl;
    }
baskeyfield
Member II

Re: Visualizar archivos desde una aplicacion Java

Hola,

Tu aplicación, debe hacer la función de un servlet de descarga, en lugar de utilizar el servlet de descarga de alfresco, ya que como dices la ip de alfresco no es pública.

Para ello, tu tendras urls en tu aplicación del tipo:

http://miAplicacion/servletDescarga?uuid=84834-2424-234234-234234-234234232

De esta forma, tu tendrás un .java llamado servletDescarga, al que se le pasa un parámetro uuid que corresponde al uuid que te quieres descargar. Tu servlet hará lo siguiente:

1.- Usando el uuid se conectará a alfresco y leera los bytes del documento solicitado
2.- Una vez tenga leidos todos los bytes, los escribirá en el response, como hacen todos los servlet de descarga.

A grandes rasgos lo que haces es una plataforma intermedia de intercambio de documentos. Te dejo un ejemplo de como hacer un servlet de descarga en java:

http://snippets.dzone.com/posts/show/4629

Tienes que modificar:

new FileInputStream(f)

Por un inputStream de tu byte[] que contiene los bytes leidos previamente de alfresco.

Saludos.
vochoa
Member II

Re: Visualizar archivos desde una aplicacion Java

Gracias si lo comprendo, ya estoy mas encaminado esa era una de las opciones que queria manejar, pero tengo una consulta como obtengo el uuid de un contenido en alfresco? y si tuvieras un ejemplo de convertir un Nodo de alfresco a un byte [] me seria de gran ayuda con esa dos cosas ya estaria practicamante mi problema resuelto. Gracias y estare a la espera de tu pronta respuesta..
baskeyfield
Member II

Re: Visualizar archivos desde una aplicacion Java

Buenas,

Para obtener el archivo, echale un vistazo a este post:

http://forums.alfresco.com/es/viewtopic.php?f=11&t=2304

Sobre como obtener el uuid, tu aplicación java tendrá que listar los contenidos de alfresco, y en cada contenido construirte una url que apunte a tu servlet de descarga con el uuid del documento en cuestión. Es decir, necesitas:

1- Servlet Liste carpetas (una especie de navegador)
2- Servlet Descarga
3- Jsp para mostrar las carpetas (que serán las que el servlet le pase por parámetros)

Saludos.