【问题标题】:How to set name of file downloaded from browser?如何设置从浏览器下载的文件名?
【发布时间】:2011-03-07 08:16:00
【问题描述】:

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

我的问题是,有什么方法可以指定仅使用 HTML 下载的文件的名称?因此,用户上传了一个名为“abc.txt”的文件,我将其重命名为“xyz.txt”,但是当他们下载它时,我希望浏览器默认将文件保存为“abc.txt”。如果仅使用 HTML 无法做到这一点,有什么办法吗?

【问题讨论】:

    标签: html download savefiledialog


    【解决方案1】:

    使用 HTML5 download 属性非常简单!

    这是我的 codepen 演示。

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

    我的屏幕快捷方式。

    【讨论】:

    • 这不起作用,至少在 chrome 上是这样。当我尝试它时,它只是说“失败 - 没有文件”或“失败 - 服务器问题”。
    • @BrettWoodward 你能告诉我你的 Chrome 版本是什么吗?对我来说还好。请参阅gif 演示。
    • @BrettWoodward 当 href 值指向有错误的页面时会发生这种情况。尝试删除“下载”属性以检查页面是否在没有下载的情况下工作。
    【解决方案2】:

    当他们单击按钮下载文件时,您可以添加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>
    

    【讨论】:

    • 有时如果文件大小不可读或 myfilename 被省略,则 download="myfilename" 将不起作用。
    • 这取决于文件大小是否可读?我不知道...但我想我记得我遇到了一些不想重命名的文件的问题...也许这可能是问题...嗯...在我的情况下,文件来自机架空间,所以我无法访问标题:D
    • 有几种方法可以避免这种情况,您可以随时使用 curl 或 wget 将文件下载到服务器,使用 rename(thefileIdownloaded.file myfile.file) 重命名,然后输出链接,设置计时器 10 分钟以删除该文件,并且您始终拥有干净的服务器,并且该文件在您的服务器上,在这种情况下,您可以对其进行任何操作
    • "download" 属性仅适用于同源资源的链接。
    【解决方案3】:

    在 HTML 中找不到方法。我认为您将需要一个服务器端脚本,该脚本将输出内容处置标头。在 php 中是这样完成的:

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

    如果您希望提供默认文件名,但不提供自动下载,这似乎可行。

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

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

    【讨论】:

    • 谢谢。我想是这样的,只是想确定一下。
    • 您已删除要链接的问题。你解决了吗?
    【解决方案4】:

    嗯,@Palantir 的回答对我来说是最正确的方法

    如果您打算将其用于多个文件,那么我建议您使用(或制作一个)PHP 下载管理器。

    但是,如果你想把它变成一两个文件,我会建议你使用 mod_rewrite 选项

    您必须在 htdocs 文件夹中创建或编辑您的 .htaccess 文件并添加:

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

    使用此代码,用户将下载名为 abc.txt

    xyz.txt 数据

    注意:验证您的文件中是否已经有“RewriteEngine on”,如果有,请为您希望重定向的每个文件仅添加 second。 p>

    祝你好运 ;) (对不起我的英语)

    【讨论】:

    • 嗯,@Mephiztopheles 的回答对我来说是最正确的方法!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    相关资源
    最近更新 更多