Question

J'écris une application web qui, entre autres, permet aux utilisateurs de télécharger des fichiers sur mon serveur. Afin d'éviter des conflits de noms et d'organiser les fichiers, je les renomme une fois qu'ils sont mis sur mon serveur. En gardant la trace du nom de fichier d'origine, je peux communiquer avec le propriétaire du fichier sans les savoir jamais j'ai changé le nom du fichier à la fin arrière. Autrement dit, jusqu'à ce qu'ils ne téléchargez 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 seulement HTML? Ainsi, un utilisateur télécharge un fichier nommé 'abc.txt et je renomme à « xyz.txt », mais quand ils le télécharger Je veux que le navigateur pour enregistrer le fichier en tant que « abc.txt » par défaut. Si cela est impossible avec juste HTML, est-il possible de le faire?

Était-ce utile?

La solution

Vous ne trouvez pas un moyen en HTML. Je pense que vous aurez besoin d'un script côté serveur qui émet 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 le téléchargement automatique, cela semble fonctionner.

header('Content-Disposition: filename="filetodownload.jpg"');

En fait, il est le serveur qui sert directement vos fichiers, vous avez donc aucun moyen d'interagir avec du HTML, comme HTML ne participe pas du tout.

Autres conseils

Quand ils cliquent sur un bouton pour télécharger le fichier, vous pouvez ajouter le attribut HTML5 download où vous pouvez définir le nom du fichier par défaut.

C'est ce que je faisais, quand je crée un fichier XLSX et le navigateur veulent enregistrer comme fichier zip.

<a href="path/to/file" download="renamed.txt">Download</a>
<a href="downloads/export.xlsx" download="Data-Export.xlsx">Download Export</a>

il est très facile en utilisant l'attribut HTML5 download!

  

voici mon codepen demo.

https://codepen.io/xgqfrms/full/GyEGzG/

  

mon raccourci écran.

  

add gif demo.

Cela devra être fait sur le côté serveur. Vous devez avoir l'ancien nom de fichier dans un endroit de base de données, et vous pouvez ensuite 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 de 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 façon la plus correcte

Si vous prévoyez d'utiliser cela avec plusieurs fichiers, alors je vous suggère d'utiliser (ou faire un) PHP Download Manager.

et , si vous voulez faire cela à un ou deux fichiers, Je vous suggère l'option mod_rewrite :

Vous devez créer ou modifier votre .htaccess fichier htdocs dossier et ajouter ceci:

RewriteEngine  on 
RewriteRule ^abc\.txt$  xyz.txt

Avec ce code, les utilisateurs téléchargera xyz.txt données avec le nom abc.txt

REMARQUE: Vérifiez si vous avez déjà le « RewriteEngine sur » sur votre dossier, si oui, ajoutez seulement le secondes pour chaque fichier que vous souhaitez rediriger

Bonne chance ;) (Désolé pour mon anglais)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top