89

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

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

4

4 回答 4

104

当他们单击按钮下载文件时,您可以添加HTML5 属性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>
于 2015-02-06T11:13:47.863 回答
89

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

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

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

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

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

于 2010-06-23T13:58:33.270 回答
5

使用 HTML5download属性非常容易!

这是我的代码笔演示。

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

我的屏幕快捷方式。

在此处输入图像描述

在此处输入图像描述

于 2018-01-02T15:57:22.577 回答
-1

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

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

但是,如果您想将其制作为一两个文件,我会建议您使用 mod_rewrite 选项

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

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

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

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

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

于 2010-06-23T14:04:26.687 回答