9 nov. 2021 15:34:40 Thomas Dumont avatar

FileService

Service de gestion de fichiers

FileService est un service permettant de stocker les fichiers.

FileService utilise des implémentations de IFileStorageService pour choisir le mode de stockage (base, filesystem, cloud...).

Chaque implémentation doit être proposée avec deux autres services : un service de génération / lecture d'URL de téléchargement, un service de gestion de droits d'accès aux fichiers.

Le service de gestion des URL doit implémenter l'interface IFileDownloadUrlService , et le service de gestion des droits d'accès aux fichiers doit implémenter l'interface IFileRBACService .

Plusieurs services de stockage peuvent être utilisés.

Implémentation par défaut dans Lutece Core

Un LocalDataBaseFileStorageService est fourni par défaut par Lutece Core, et utilise les tables de la base de données Lutece : core_file et core_physical_file. Deux implémentations de IFileDownloadUrlService et IFileRBACService sont également associées par défaut.

<bean id="defaultFileDownloadUrlService" class="fr.paris.lutece.portal.service.file.implementation.DefaultFileDownloadService" />
    <bean id="defaultFileNoRBACService" class="fr.paris.lutece.portal.service.file.implementation.DefaultFileNoRBACService" />

    <bean id="localDatabaseFileService" class="fr.paris.lutece.portal.service.file.implementation.LocalDatabaseFileService" >
            <constructor-arg ref="defaultFileDownloadUrlService" />
            <constructor-arg ref="defaultFileNoRBACService" />
            <property name="default" value="true" />
    </bean>

Autres implémentations

Le plugin BlobStore propose une autre implémentation de IFileStorageService , permettant de stocker les fichiers sur le fileSystem, sur une base dédiée ou sur un service de stockage distant.

Exemples d'utilisation

Enregistrer le fichier envoyé dans un champ de type FILE :

MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
        FileItem fileItem = multipartRequest.getFile( PARAMETER_PROJECT_FILE );

        if ( fileItem != null  )
        {
            try
            {
                IFileStoreServiceProvider fileStoreService = FileService.getInstance( ).getFileStoreServiceProvider( );

                String strFileStoreKey = fileStoreService.storeFileItem( fileItem );
                _project.setFileKey( strFileStoreKey );
           (...)

Génération du lien de téléchargement pour le template :

IFileStoreServiceProvider fileStoreService = FileService.getInstance( ).getFileStoreServiceProvider( );
String strFileUrl = fileStoreService.getFileDownloadUrlBO( _project.getFileKey( ) );

model.put( "project_file_url" , strFileUrl );

Exemple de lien encodé :

http://localhost:8080/example/jsp/admin/file/download?provider=defaultDatabaseFileStoreProvider&data=O3lmKxHlAX67WE7_WNuLw2Bi0LDlxi2RldReG03f3nyfxcxRzCtGWvU8e08VNiO35C0GGixxKRlQTO5ObMB8ZQ1sLFOEDyKXCEUZL4PR7ClBAcnruis2EyjLdPgPIbtbzwBUj37Vm4RFdVYEbVEbDCFLUMZX6Pufv28q5Ce0JCFjk4NKuot7c3j1FNegx4zXjGE18oIxgDoHxFHXt1VAFmeIP7PKJIU2ZEDLZUw2DluhW-diO9DNF2sN0BmHhn6XiNaBQQ_Ia4Zt5MaB9KpZXL8LxYSzvq8bse2Hxi6SXZtpFF0tzSQ5dBjmLsHSzmn691Li0DsEbLnTB84icM6OlA==