lunedì 14 marzo 2011

Semplici Uploaders per Alfresco

NOTA: traduzione dell'articolo originale in spagnolo Uploaders simples en alfresco di Zylk.net. Grazie a Toni per la segnalazione di questo articolo.

Una delle caratteristiche più interessanti di Alfresco ECM è la varietà di protocolli che consentono di autenticarsi ed eseguire azioni sul repository, tramite le unità di rete condivise o le diverse API disponibili. Ciò è principalmente dovuto all'uso di standard, che a medio-lungo termine diventa un chiaro vantaggio tecnologico rispetto ad altri stack più chiusi, e permette l'integrazione con ogni sorta di strumenti di terze parti. Tra questi protocolli (e API) possiamo evidenziare: WebDAV, FTP, CIFS, NFS, IMAP, REST, SOAP e CMIS.

Ignorando le unità di rete CIFS e NFS e lasciando da parte per ora il metodo di caricare i dati tramite e-mail, possiamo creare uploaders tramite numerosi protocolli quali WebDAV, FTP, o REST con poco sforzo. Ad esempio, con il comando curl posso utilizzare il canale FTP come segue:
curl -T sinadura3.tgz ftp://alfie.zylk.net/Alfresco/sinadura --user cesar:secret
O meglio ancora, usare il canale WebDAV, che può garantire più sicurezza:
curl -T sinadura3.tgz https://alfie.zylk.net/alfresco/webdav/sinadura --user cesar:secret
Un'altra opzione è quella di utilizzare lo strato REST con un piccolo script che richiami curl per inviare il file in questione:
#!/bin/bash
#
# Alfresco upload script with CURL by LouiSe@louise.hu
#
# Usage: alfresco_uploader.sh    
#
# ./alfresco_uploader.sh /tmp/some.pdf someSite documentLibrary someDir
#

ALFRESCO_SERVER="http://alfie.zylk.net:8080/alfresco"
USERNAME="cesar"
PASSWORD="secret"

#CURL_VERBOSE=-v
CURL_VERBOSE=-s
CURL_METHOD=POST
FILENAME=`basename $1`
MIMETYPE=`file --brief --mime-type $1`
UPLOAD_SERVICE_URL=${ALFRESCO_SERVER}/service/api/upload

echo "Uploading: ${FILENAME} ($MIMETYPE) to ${ALFRESCO_SERVER}"

curl ${CURL_VERBOSE} -k -X ${CURL_METHOD} \
    --user "${USERNAME}":"${PASSWORD}" \
    -F filedata=@$1 -F siteid="$2" -F containerid="$3" \
    -F uploaddirectory="$4" \ -F filename="${FILENAME}" \
    -F contenttype="${MIMETYPE}" "${UPLOAD_SERVICE_URL}" \
    | grep 'description' | cut -d ':' -f 2 | tr -d '\"'

Lo script è tratto da questo blog.

Un'altra strategia possibile è quella di utilizzare lo standard CMIS con un piccolo script in python (con le librerie cmislib).

#! /usr/bin/python
from cmislib.model import CmisClient
from sys import argv

client = CmisClient('http://alfie.zylk.net:8080/alfresco/service/cmis', 'cesar', 'secret')
repo = client.defaultRepository
someFolder = repo.getObjectByPath('/'+argv[2])
someFolder.getTitle()
someFolder.getProperties()

someFile = open(argv[1], 'r')
someDoc = someFolder.createDocument(argv[1], contentFile=someFile)

O l'equivalente in PHP:

 $repo_password ));
} else {
  $client = new CMISService($repo_url, $repo_username, $repo_password);
}

$myfolder = $client->getObjectByPath($repo_folder);
$file     = fopen($filename,"r");
$contents = fread($file, filesize($filename));
$fi       = new finfo(FILEINFO_MIME,'/usr/share/file/magic');
$mime_type= $fi->buffer(file_get_contents($filename));

fclose($file);

$obj_doc  = $client->createDocument($myfolder->id, $filename, array (), $contents, $mime_type);

lunedì 7 marzo 2011

Creare il database MySQL per Alfresco

E' possibile procedere alla creazione del database MySQL per Alfresco nel modo seguente:

1) Settare MySQL per UTF-8

Editare /etc/mysql/my.cnf aggiungendo default-character-set = utf8 sotto la sezione [mysqld]:
[mysqld]
#
# ...
#
default-character-set = utf8
2) Riavviare mysql, di solito tramite /etc/init.d/mysql restart

3) Loggarsi come root: mysql -u root -p

4) eseguire i seguenti comandi (nell'ipotesi sia stato precedentemente creato un database 'alfresco' con utente 'alfresco'):
CREATE DATABASE alfresco DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
GRANT ALL PRIVILEGES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'alfresco';
GRANT SELECT,LOCK TABLES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'alfresco';
FLUSH PRIVILEGES;
quit;