URL: https://linuxfr.org/users/see/journaux/jus-just-upload-stuff Title: jus - Just Upload Stuff Authors: 못 옷 홋 ♨ Date: 2016年09月18日T20:40:43+02:00 License: CC By-SA Tags: php, upload, partage et tribune Score: 21 Chères moules, poulpes et autres pinnipèdes, Depuis un petit moment je ne suis plus satisfait par ma méthode ancestrale de partage de fichiers, qui consiste à exécuter la commande suivante dans mon terminal préféré : ```bash scp mon-fichier.png ssz.fr:http/ssz.fr/www/brdl/fichier.png ``` Pour autant, aucune des solutions que j'ai pu trouver en ligne n'ont été jusqu'ici à la hauteur de mes espérances. Vendredi dernier j'ai justement eu l'occasion de tester une de ces solutions, qui ne marche **bêtement** pas sans Javascript. Je dis bêtement vraiment parce que faire un lien vers l'url actuelle avec `&p=1` en plus et qui fonctionne sans Javascript, c'est clairement possible. * **[Jirafeau](http://jirafeau.net/)** — https://gitlab.com/mojo42/Jirafeau C'est simple et classe, certes, mais Javascript est nécessaire pour télécharger les fichiers partagés (!) qui ne sont, après upload ou partage d'un lien, pas disponibles par un lien direct. Ajouter `&p=1` dans l'url donne le résultat recherché. Le code semble relativement acceptable mais les téléchargements doivent impérativement passer à travers `f.php` ce qui occupe un précieux process PHP pour rien. * **[Pomf.se](http://pomf.se)** et [ses](https://aww.moe/) [nombreux](https://kyaa.sg/) [clones](https://cuntflaps.me/) — https://github.com/pomf/pomf Simple et classe d'apparence aussi, mais côté utilisateur il faut aller sur une page spécifique pour que ça marche sans Javascript, et côté admin il faut quand même compiler des trucs et ça utilise une base de données. * **[Uguu.se](https://uguu.se/)** — https://github.com/nokonoko/uguu Euh bon j'avoue, ça marche bien, sans Javascript aussi, sans base de données, ça a l'air bien, mais euh j'aime pas trop l'aspect, trop de CSS à mon goût. Et sans JS, on ne voit pas quand un fichier a été choisi. * **[Shareit](https://git.devys.org/shareit/about/)** Bon c'est du Python * **[Lufi](https://framadrop.org/)** — https://framagit.org/luc/lufi Bon c'est du Perl * **[Jb3](https://b3.bci.im/paste)** — https://github.com/devnewton/jb3 Bon c'est du Java Bref. Il y en a d'autres, mais rien de trop trop intéressant et facile à mettre en place, ou qui réponde vraiment à ce que je cherche, en tout cas dans ce que j'ai trouvé. Du coup j'en ai écrit un, en PHP, sans Javascript et sans base de données, j'ose espérer qu'il est aussi simple que possible. Donc voilà : *jus - Just Upload Stuff*. C'est du GPLv3, le code est ici : https://github.com/seeschloss/jus compatible PHP5.6, pour Free, et sans dépendance particulière. Mon instance publique est ici : [up.ÿ.fr](https://up.ÿ.fr) (et mon test sur un hébergement Free : [schee.free.fr/jus](http://schee.free.fr/jus)). L'idée, c'est de pouvoir le mettre sur n'importe quel type d'hébergement un peu potable (même les pages perso Free !) sans trop avoir à configurer quoi que ce soit, mais quand même de pouvoir aussi faire quelque chose de propre comme pour chez moi avec un domaine séparé pour servir les fichiers, les sources et la configuration en dehors du document root, le support du PUT, etc. Les détails d'administration à mon avis n'ont pas leur place dans le code de l'application : pour enlever les fichiers après un certain temps, un cronjob fera l'affaire, pour limiter l'accès à l'upload ou au téléchargement, pourquoi pas simplement de l'authentification HTTP gérée par le serveur (même si je pense que de l'auth OAuth2 pour limiter l'accès aux utilisateurs de DLFP par exemple pour joindre des fichiers sur la [tribune](/board) pourrait être intéressante, par exemple). Côté utilisation, l'upload *juste marche* sur l'interface web, et `curl` permet d'uploader un fichier vraiment facilement grâce à `--upload-file` (ou `-T`) : ```bash curl --upload-file https://up.ÿ.fr ``` qui répond simplement avec l'url du fichier uploadé. Pour les installations sur des serveurs où on ne maîtrise pas tout et où on ne peut pas utiliser de PUT, ça reste assez simple : ```bash curl -F file[]=@ https://up.ÿ.fr ``` qui permet aussi de multiplier les `-F file[]=` pour uploader plusieurs fichiers à la fois. J'ai hésité et finalement décidé de ne pas ajouter de header inconditionnel `Access-Control-Allow-Origin: *` qui aurait pourtant permis d'uploader des fichiers directement en Javascript à partir d'un autre serveur sous un autre domaine, mais ça viendra peut-être si on me convainc que c'est utile. Dans les fonctionnalités que j'imagine ajouter dans le futur, je pense à : * permettre authentification OAuth2 auprès de DLFP ou autres * permettre la suggestion d'un nom de fichier au lieu de forcément en générer un aléatoire côté serveur * ajouter une barre de progression à l'interface web * permettre le copier-coller et le drag-and-drop (avec du Javascript du coup) * ajouter un gros message en rouge clignotant pour indiquer que faire confiance à un serveur d'upload pour chiffrer des fichiers de son côté, c'est vraiment naïf et que si vous voulez que vos fichiers soient chiffrés, faites-le vous-même avant de les uploader. Au passage, *Let's Encrypt* ne supporte toujours pas les noms de domaine avec des accents, c'est pénible.

AltStyle によって変換されたページ (->オリジナル) /