Présentation de l’addin Files #
Cet addin offre 3 composants pour la gestion des fichiers:
- le téléverseur (depuis le poste de travail vers le serveur BiBOARD)
- le téléchargeur (depuis le serveur BiBOARD vers le poste de travail)
Ces composants ouvrent la possibilité d’interagir avec des fichiers et/ou répertoires du serveur ou de les stocker dans une base de données.
Il est donc possible pour les utilisateurs finaux d’envoyer des fichiers pour les partager avec d’autres utilisateurs.
- le file manager
Le composant File manager (similaire au File Explorer de windows) offre aux utilisateurs finaux la possibilité de gérer des fichiers et des dossiers.
Ce contrôle permet aux utilisateurs finaux de télécharger et de sélectionner des fichiers et de modifier la structure des dossiers (en renommant, en déplaçant, en copiant et en supprimant des fichiers ou des dossiers).
Les fonctions de gestion des fichiers et des dossiers sont entièrement personnalisables et peuvent être désactivées, si nécessaire.
Les composants sont soumis aux droits donnés par l’administrateur du système.
Prérequis #
Installation Addin Files #
Utiliser l’installeur de votre instance (default, A, B, C…), pour installer l’addin files.
Les fichiers de l’addin vont être installés dans le même répertoire que votre instance. Il suffit juste de confirmer le path pendant l’install.
L’addin peut être installé dans les différents serveurs web du répertoire.
IIS : Configurer la taille limite du fichier #
IIS a des limites de taille des fichiers qui sont imposées.
Pour les modifier au niveaux du site il faut modifier le web.config.
Les valeurs à modifier sont:
- maxRequestLength
- maxAllowedContentLength
maxRequestLength (attribut de l’élément httpRunTime) qui indique la taille maximale de l’upload d’un fichier supporté par ASP.NET. La valeur par défaut est 4 096 Ko (soit 4 Mo)
maxAllowedContentLength qui spécifie la taille maximale du contenu d’une requête supporté par IIS. La valeur par défaut est 30000000 octet (soit 28.6 Mo)
Configurer la limite du fichier souhaité. Exemple de configuration pour 500 Mo = 524288000 octet.
Attention : maxRequestLength est en ko alors que maxAllowedContentLength est en octet.
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <httpRuntime maxRequestLength="512000" executionTimeout="220" enable="true" enableVersionHeader="false" /> </system.web> <system.webServer> <security> <requestFiltering> <requestLimits maxAllowedContentLength="524288000" /> </requestFiltering> </security> </system.webServer> <runtime> <security> <requestFiltering> <requestLimits maxAllowedContentLength="524288000"/> </requestFiltering> </security> </runtime> </configuration>
Autorisations du file system sur le serveur BiBOARD #
Les trois composants sont soumis au droit « Windows du file system ».
Les utilisateurs « Designers » du Studio sont soumis aux mèmes restrictions que les utilisateurs web.
Utiliser le fichier FilesPermissions.xml pour définir les droits de manière plus fine.
Attention : pour des raisons de sécurité, ce fichier n'est pas fourni à l'installation mais doit être créé et renseigné par l'administrateur système Windows.
Ce fichier doit se trouver dans le même répertoire que le site web (au même niveau que le fichier du web.config).
Le fichier FilesPermissions.xml est chargé au démarrage de IIS.
Pour recharger les permissions sans redémarrer IIS ou à minima le pool d’application du site BiBOARD, vous pouvez entrer ce paramètre dans une URL du site BiBOARD : « InitFileSystemPermissions=1 »
Exemple : http://BiBOARDServer/board.aspx?vId=1&InitFileSystemPermissions=1
Le fichier a deux parties: Files et Folders.
La partie « Files » est appliquée à tous les « Folders ».
La partie « Folders » défini les droits pour une liste de « FolderPermission ».
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission></FilePermission>
<FilePermission></FilePermission>
<FilePermission></FilePermission>
</Files>
<Folders>
<FolderPermission></FolderPermission>
<FolderPermission></FolderPermission>
</Folders>
</FileSystemPermissions>
Les TAGs
Path : c'est le chemin (ou les extensions de fichier) pour lesquels les droits vont être appliqués.
Browse : possibilité de parcourir/voir les fichiers/répertoires
Edit : possibilité d'éditer les fichiers/répertoires
Download: possibilité de faire le téléchargement de fichiers
Les valeurs possibles sont:
Default ne change pas le droit.
Allow droit accordé.
Deny droit refusé.
Note: le tag <Role /> est présent mais pas implémenté pour l’instant.
Exemple:
<FilePermission> <Path>*.dll</Path> <Role /> <Browse>Default</Browse> <Edit>Allow</Edit> <Download>Deny</Download> </FilePermission>
Le TAG « FolderPermission » défini les droits pour un répertoire et sous répertoires. Il a une structure récursive.
Attention le Path principal est absolu (ex: c:\temp\), les folder1 et folder2 sont relatifs par rapport au c:\temp\.
<FolderPermission>
<Path>c:\temp\</Path>
<Role />
<Browse></Browse>
<Edit></Edit>
<Upload></Upload>
<Files>
<FilePermission></FilePermission>
<FilePermission></FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>folder1</Path>
</FolderPermission>
<FolderPermission>
<Path>folder2</Path>
</FolderPermission>
</Folders>
</FolderPermission>
Exemple sans aucun droit #
Retirer tous les droits.
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission>
<Path>*.*</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>*</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FileSystemPermissions>
Exemple tout autoriser #
Autoriser tous les droits pour tous les fichiers et pour tous les répertoires.
Attention: ne pas utiliser * pour la racine du disque (Exemple : c:\ ), un trop grand nombre des fichiers ne peut pas être géré par les composants.
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission>
<Path>*.*</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Download>Allow</Download>
</FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>c:\repertoire</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FileSystemPermissions>
Exemple tout interdire et donner quelques droits. #
C’est cette méthode qui est préconisée.
Les droits généraux sont <Browse>Deny</Browse>, <Edit>Deny</Edit>, <Upload>Deny</Upload>, mais on autorise les répertoires temp et les fichier temp\*.
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission>
<Path>*.dll</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>web.config</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>*.aspx</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>C:\aaa\bbb\ccc\BiBOARDWebServer\</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders>
<FolderPermission>
<Path>temp</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>temp\*</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FolderPermission>
</Folders>
</FileSystemPermissions>
Exemple autoriser un répertoire et empêcher ce que l’on ne veut pas #
On se concentre sur un répertoire qui a <Browse>Allow</Browse> et <Edit>Allow</Edit>. Apres, on bloque tous les répertoires interdits.
Attention le Path principal est absolu, les suivants sont relatifs.
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission>
<Path>*.dll</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>web.config</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>*.aspx</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>C:\aaa\bbb\ddd\BiBOARDWebServer\</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Deny</Upload>
<Files />
<Folders>
<FolderPermission>
<Path>bin</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>Web References</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>admin</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>amcharts</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>aspnet_client</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>Authentication</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>Content</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>class</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>test_dir</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FolderPermission>
</Folders>
</FileSystemPermissions>
Exemple plusieurs répertoires indépendants #
<?xml version="1.0" encoding="utf-8"?>
<FileSystemPermissions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Files>
<FilePermission>
<Path>*.dll</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>web.config</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
<FilePermission>
<Path>*.aspx</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Download>Deny</Download>
</FilePermission>
</Files>
<Folders>
<FolderPermission>
<Path>C:\aaa\bbb\ccc\BiBOARDWebServer\</Path>
<Role />
<Browse>Deny</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders>
<FolderPermission>
<Path>temp</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>temp\*</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FolderPermission>
<FolderPermission>
<Path>c:\\file_Addins\\</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Deny</Edit>
<Upload>Deny</Upload>
<Files />
<Folders>
<FolderPermission>
<Path>Dir_1</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
<FolderPermission>
<Path>AddinFiles_Directoy</Path>
<Role />
<Browse>Allow</Browse>
<Edit>Allow</Edit>
<Upload>Allow</Upload>
<Files />
<Folders />
</FolderPermission>
</Folders>
</FolderPermission>
</Folders>
</FileSystemPermissions>
Statistiques #
Upload and Download files #
Si les statistiques sont activées dans le web.config
<appSettings>
<add key="Statistics" value="1" />
</appSettings>
Les composants vont logger l’activité des fichiers. La query suivante va visualiser les logs :
SELECT * FROM [dbo].[Stats_bb] where [Stat_Entity_Type] = 'FILES' order by [Stat_DateTime]
Addin : Files #
Addins : présentation des composants Files
Téléverseur de fichier (Uploader) #
Le composant permet des téléverser des fichiers dans le file system serveur ou dans une base de données.
Propriétés #
- Emprunter l’identité de l’utilisateur
Pour les droits d'écriture dans le file system du serveur .
- Destination du fichier
1. Répertoire du serveur
Le composant téléverse les fichiers dans le file system du serveur
2. Base de données
Le composant téléverse les fichiers dans une table d'une base des données.
- Extensions de fichier autorisées
Syntaxe à utiliser: .png;.gif;.zip
- Taille maximale du fichier
Taille en octets.
Exemple 1 000 000 pour 1 Mo
- Afficher les boutons Ajouter/Supprimer
Permet à l'utilisateur d'ajouter le fichier simultané.
- Nombre d’entrées de fichiers
Pour definir le comportement à l'affichage du composant dans la page.
0 pour cacher l'entrée.
1 défaut.
n n entrées.
- Nombre d’entrées maximum de fichier
Pour limiter le nombre de fichiers téléversés simultanément.
- Fichier sur écriture
Dans le cas du [Destination du fichier: Répertoire du serveur] défini le droit d'écriture.
- Requête SQL
Uniquement dans le cas où [Destination du fichier: Base de données], défini la requête SQL qui est exécutée pour insérer le fichier dans la base de données.
Les tags suivants peuvent être utilisé dans le SQL :
#[FILE_NAME] : c'est le nom du fichier téléversé
#[FILE_DATA] : c'est la data (et heure) du téléversement
#[FILE_CONTENT_TYPE] : c'est le type du fichier
#[FILE_SIZE] : c'est la dimension (on octet) du fichier
- Formule de chemin de dossier
Dans le cas du [Destination du fichier: Répertoire du serveur] est le chemin du dossier.
Exemples:
Racine du dossier web
"~\"
Dossier temp du dossier web
"~\temp\"
Le répertoire est dynamique
"~\temp\" + BIBOARDUSERLOGIN + "\"
Répertoire extérieur au serveur web
"c:\tmp\"
Note: les " font partie de la formule.
- Javascript de départ (facultatif)
Note : pour abandonner l’action SQL en cours dans le code javascript, vous devez utiliser
e.cancel = true;
- Javascript de fin (facultatif)
- Liste de variable accessibles via javascript: s.cpFilesCount : Nombres de fichiers traités s.cpFileNames : Liste des fichiers traités (liste de nom séparés par ; ) Pour chaque fichier traité (index commence à 0) : s.cpFileName_ + index : nom du fichier s.cpContentLength_ + index : taille du fichier s.cpContentType_ + index : type de fichier s..cpFolder_ + index : répertoire
Téléchargeur des fichiers (Downloader) #
Le composant permet de télécharger les fichiers dans le poste client.
Propriétés #
- Fournisseur
1. Répertoire du serveur
2. Base de données
- Mode d’affichage
Vignettes
Détails
- Formule de chemin de dossier
Même chose que pour le composant Téléverseur de fichier (Uploader)
- Champ nom de fichier
Si [Fournisseur: Base de données] le composant doit avoir une source de données avec un champ qui contient le nom du fichier.
- Champ taille du fichier
Si [Fournisseur: Base de données] le composant doit avoir une source de données avec un champ qui contient la taille du fichier.
- Champ data (binaire)
Si [Fournisseur: Base de données] le composant doit avoir une source de données avec un champ qui contient le binaire du fichier.
- Afficher la boîte de filtre
Permet à l'utilisateur de filtrer les fichiers
File Manager #
Le composant permet de gérer des fichiers hiérarchiques comme un File Manager
Propriétés #
- Fournisseur
1. Répertoire du serveur
2. Base de données
- Formule de chemin de dossier
Même chose que pour le composant Téléchargeur des fichiers (Downloader).
Les propriétés suivantes vont affecter les actions permises du composant.
Attention: les propriétés sont appliquées seulement si [Fournisseur: Répertoire du serveur].
- Autoriser le téléchargement
- Autoriser le téléversement
- Extensions de fichier autorisées
- Autoriser Créer
- Autoriser la suppression
- Autoriser le déplacement
- Autoriser le changement de nom
Les propriétés suivantes vont affecter la visualisation du composant.
- Mode d’affichage
Même chose que pour le composant Téléchargeur des fichiers (Downloader)
- Afficher le volet des dossiers
- Afficher le chemin
- Afficher le bouton d’actualisation
- Afficher la boîte de filtre
Les propriétés suivantes sont valides si [Fournisseur: Base de données] le composant doit avoir une source des données qui contient toutes les propriétés.
- Champ clé
- Champ clé parent
- Champ nom de fichier
- Champ taille de fichier
- Champ data (binaire)
- Champ dossier/fichier
- Champ dernière écriture
Cas d’utilisation #
Répertoire du serveur (File System) #
Pour tous les exemples configurer Destination du fichier/ Fournisseur: Répertoire du serveur
Exemple : répertoire dynamique dépendant du nom de l’utilisateur #
1. Poser un composant Téléverseur.
2. Configurer la propriété Formule de chemin de dossier: « ~\temp\ » + BIBOARDUSERLOGIN + « \ »
3. Poser un composant Téléchargeur.
4. Configurer la propriété Formule de chemin de dossier: « ~\temp\ » + BIBOARDUSERLOGIN + « \ »
5. Poser un composant File Manager.
6. Configurer la propriété Formule de chemin de dossier: « ~\temp\ » + BIBOARDUSERLOGIN + « \ »
7. Lier les trois composants par des liens de type refresh.
Exemple : répertoire dynamique dépendant d’une clef #
0. Pour les trois composants Formule de chemin de dossier: « ~\temp\ » + @[F_ID] + « \ »
1. Datasource avec une clef unique Example
SELECT 1 AS id
UNION ALL SELECT 20
UNION ALL SELECT 300
UNION ALL SELECT 4000
UNION ALL SELECT 50000
2. Poser une liste dépendant de cette datasource (1)
3. Datasource avec un paramètre Example
SELECT tb.id from (
SELECT 1 AS id
UNION ALL SELECT 20
UNION ALL SELECT 300
UNION ALL SELECT 4000
UNION ALL SELECT 50000
) tb Where tb.id = :F_ID
4. Poser un composant Téléverseur lié à la datasource du point (3)
5. Créer un lien entre le composant liste (2) et Téléverseur (4)
6. Poser un composant Téléchargeur avec la datasource du point 3
7. Lien de type refresh entre Téléverseur (4) et Téléchargeur (6)
8. Lien param entre liste (2) et F_ID du Téléchargeur (6)
9. Composant File Manager avec la datasource du point 3
10. Liens param entre liste (2) et F_ID du File Manager (9)
11. Liens refresh entre Téléverseur (4) et File Manager (9)
Base de données #
Créer la table file system #
La table doit avoir au minimum, une structure récursive ID et PARENT_ID, et les champs File Name, File Size,File Data, File Last Write, IsFolder.
Les champs sont nécessaires pour lier le composant aux données.
Voici un exemple :
CREATE TABLE [dbo].[DataBaseFileSystem](
[ID] [int] IDENTITY(1,1) NOT NULL,
[PARENT_ID] [int] NULL,
[FileName] [nvarchar](100) NOT NULL,
[FileSize] [bigint] NOT NULL,
[FileData] [varbinary](max) NOT NULL,
[FileLastWrite] [datetime] NULL,
[IsFolder] [bit] NOT NULL,
PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Exemple de SQL pour l’upload files #
DECLARE @MyID int SET @MyID = (select ID from DataBaseFileSystem where FileName = CAST(@[F_ID] as VARCHAR(10))); if (@MyID is null) BEGIN INSERT INTO [Datawarehouse].[dbo].DataBaseFileSystem ([PARENT_ID] ,[FileName] ,[FileSize] ,[FileData] ,[FileLastWrite] ,[IsFolder]) VALUES (1, CAST(@[F_ID] as VARCHAR(10)), 0, 0, GETDATE(), 1) SET @MyID = (select ID from DataBaseFileSystem where FileName = CAST(@[F_ID] as VARCHAR(10))); END INSERT INTO [Datawarehouse].[dbo].DataBaseFileSystem ([PARENT_ID] ,[FileName] ,[FileSize] ,[FileData] ,[FileLastWrite] ,[IsFolder]) VALUES (@MyID, #[FILE_NAME], #[FILE_SIZE], #[FILE_DATA], GETDATE(), 0)