J'écris une application Web qui, entre autres, permet aux utilisateurs de télécharger des fichiers sur mon serveur. Afin d'éviter les conflits de noms et d'organiser les fichiers, je les renomme une fois qu'ils sont placés sur mon serveur. En gardant une trace du nom du fichier d'origine, je peux communiquer avec le propriétaire du fichier sans qu'il sache que j'ai changé le nom du fichier à l'arrière. Autrement dit, jusqu'à ce qu'ils aillent télécharger le fichier. Dans ce cas, ils sont invités à télécharger un fichier avec un nom inconnu.
Ma question est, est-il possible de spécifier le nom d'un fichier à télécharger en utilisant uniquement HTML? Donc, un utilisateur télécharge un fichier nommé 'abc.txt' et je le renomme en 'xyz.txt', mais quand il le télécharge, je veux que le navigateur enregistre le fichier en tant que 'abc.txt' par défaut. Si cela n'est pas possible avec seulement du HTML, existe-t-il un moyen de le faire?
Impossible de trouver un moyen en HTML. Je pense que vous aurez besoin d'un script côté serveur qui produira un en-tête de disposition de contenu. En php, cela se fait comme ceci:
header('Content-Disposition: attachment; filename="downloaded.pdf"');
si vous souhaitez fournir un nom de fichier par défaut, mais pas un téléchargement automatique, cela semble fonctionner.
header('Content-Disposition: filename="filetodownload.jpg"');
En fait, c'est le serveur qui sert directement vos fichiers, vous n'avez donc aucun moyen d'interagir avec lui depuis HTML, car HTML n'est pas du tout impliqué.
Quand ils cliquent sur un bouton pour télécharger le fichier, vous pouvez ajouter attribut HTML5 download
où vous pouvez définir le nom de fichier par défaut.
C'est ce que j'ai fait lorsque j'ai créé un fichier xlsx et que le navigateur veut l'enregistrer en tant que fichier Zip.
<a href="path/to/file" download="renamed.txt">Download</a>
<a href="downloads/export.xlsx" download="Data-Export.xlsx">Download Export</a>
download
!voici ma démo codepen .
https://codepen.io/xgqfrms/full/GyEGzG/
mon raccourci d'écran.
ajouter
gif
démo.
Cela devra être fait côté serveur. Vous devrez avoir l'ancien nom de fichier dans une base de données quelque part, puis vous pourrez le déplacer vers un dossier temporaire avec le nom correct et envoyer ce fichier à l'utilisateur. TBQH je pense que vous devriez envisager d'éviter les conflits de noms avec les sous-répertoires et stocker le chemin d'accès à chaque fichier dans votre base de données au lieu de l'ancien nom/nouveau nom.
Eh bien, la réponse de @ Palantir est, pour moi, la manière la plus correcte!
Si vous prévoyez d'utiliser cela avec plusieurs fichiers, je vous suggère d'utiliser (ou d'en créer un) PHP Download Manager.
MAIS , si vous voulez faire cela à un ou deux fichiers, je vous proposerai l'option mod_rewrite:
Vous devez créer ou éditer votre fichier . Htaccess sur le dossier htdocs et ajouter ceci:
RewriteEngine on
RewriteRule ^abc\.txt$ xyz.txt
Avec ce code, les utilisateurs téléchargeront xyz.txt données avec le nom abc.txt
REMARQUE: vérifiez si vous avez déjà le " RewriteEngine on " dans votre fichier, si oui, ajoutez uniquement le second pour chaque fichier que vous souhaitez rediriger.
Bonne chance;) (Désolé pour mon anglais)