首页 文章

如何设置从浏览器下载的文件名?

提问于
浏览
38

我正在编写一个Web应用程序,除其他外,它允许用户将文件上传到我的服务器 . 为了防止名称冲突和组织文件,我将它们放在我的服务器上后重命名 . 通过跟踪原始文件名,我可以与文件的所有者进行通信,而他们不知道我在后端更改了文件名 . 也就是说,直到他们去下载文件 . 在这种情况下,系统会提示他们下载一个名称不熟悉的文件 .

我的问题是,有没有办法只使用HTML指定要下载的文件的名称?因此,用户上传名为'abc.txt'的文件并将其重命名为'xyz.txt',但是当他们下载它时,我希望浏览器默认将文件保存为'abc.txt' . 如果仅使用HTML无法做到这一点,有没有办法做到这一点?

5 回答

  • 32

    无法在HTML中找到方法 . 我想你需要一个服务器端脚本来输出内容处理头 . 在php中,这样做:

    header('Content-Disposition: attachment; filename="downloaded.pdf"');
    

    如果你想提供一个默认的文件名,但不是自动下载,这似乎有效 .

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

    事实上,服务器直接为您的文件提供服务,因此您无法通过HTML与其进行交互,因为HTML根本不涉及 .

  • 0

    这必须在服务器端完成 . 您必须在某个数据库中具有旧文件名,然后您可以将其移动到具有正确名称的临时文件夹并将该文件发送给用户 . TBQH我认为您应该考虑避免与子目录的名称冲突,并将路径存储到数据库中的每个文件而不是旧名称/新名称 .

  • 0

    那么,@ Palantir的答案对我来说是 the most correct way

    如果您计划将其与多个文件一起使用,那么我建议您使用(或制作一个)PHP下载管理器 .

    BUT ,如果要将其转换为一个或两个文件, I will suggest you the mod_rewrite option

    您必须在htdocs文件夹上创建或编辑 .htaccess 文件并添加以下内容:

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

    使用此代码,用户将下载 xyz.txt 数据,名称为 abc.txt

    注意:验证您的文件上是否已经“RewriteEngine on”,如果是,则仅为要重定向的每个文件添加 second .

    Good Luck ;)(对不起我的英文)

  • 0

    当他们单击按钮下载文件时,您可以添加HTML5 attribute download,您可以在其中设置默认文件名 .

    这就是我做的,当我创建一个xlsx文件并且浏览器想要将其保存为zip文件时 .

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

    使用HTML5下载属性非常简单!

    这是我的codepen演示 .

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

    我的屏幕快捷方式 .

    enter image description here

    添加gif演示 .

    enter image description here

相关问题