## Mettre en ligne un fichier via SFTP Un serveur SFTP tourne sur `pica02` et vise principalement à faciliter l'upload des artifacts et autres fichiers générés (par exemple par le [Graph Bot](https://gitlab.utc.fr/picasoft/projets/graph-bot)). L'ensemble des fichiers téléversés sont ensuite accessibles via un serveur web public, consultable à l'adresse https://uploads.picasoft.net ; il faut connaître l'URL exacte pour accéder aux fichiers, l'`autoindex` n'étant pas activé. On accède au SFTP avec les paramètres suivants : * URL : `sftp://uploads.picasoft.net` * Port : 2222 * Identifiants : voir le [dépôt des identifiants](https://gitlab.utc.fr/picasoft/projets/graph-bot) : `Asso/SFTP/picasoft.net`. En ligne de commande: `sftp -P 2222 pica@uploads.picasoft.net` Le chemin autorisé en écriture est `~/uploads`. Vous pouvez créer n'importe quel sous-dossier et téléverser vos fichiers. Une fois le fichier uploadé, il est accessible sur le serveur web d'upload en supprimant le préfixe `uploads` du chemin. Exemple : * Vous uploadez un fichier `a.txt` dans `~/uploads/test` via SFTP, * Le fichier est accessible à `uploads.picasoft.net/test/a.txt`. Voici un snippet Python permettant d'automatiser l'upload : ```python import paramiko # On suppose les variables hostname, port, login, password, base_path, et files connues transport = paramiko.Transport((hostname, port)) transport.connect(None, login, password) try: client = paramiko.SFTPClient.from_transport(transport) except Exception as e: print("Error creating SFTP client : {}".format(e)) try: client.listdir(base_path) print("Folder already existing, skipping creation...") except FileNotFoundError: client.mkdir(base_path) for f in files: filename = os.path.basename(f) try: client.put(f, '{}/{}'.format(base_path, filename)) print("File {} successfully uploaded!".format(filename)) except Exception as e: print('Error uploading file {0} : {1}'.format(f, e)) ```