我正在编写一个Web应用程序,除其他外,它允许用户将文件上传到我的服务器。为了防止名称冲突和组织文件,我将它们放在我的服务器上后重命名。通过跟踪原始文件名,我可以与文件的所有者进行通信,而他们不知道我在后端更改了文件名。也就是说,直到他们去下载文件。在这种情况下,系统会提示他们下载一个名称不熟悉的文件。
我的问题是,有没有办法只使用HTML指定要下载的文件的名称?因此,用户上传名为'abc.txt'的文件并将其重命名为'xyz.txt',但是当他们下载它时,我希望浏览器默认将文件保存为'abc.txt'。如果仅使用HTML无法做到这一点,有没有办法做到这一点?
答案 0 :(得分:52)
无法在HTML中找到方法。我想你需要一个服务器端脚本来输出内容处理头。在php中,这样做:
header('Content-Disposition: attachment; filename="downloaded.pdf"');
如果您希望提供默认文件名,但不能自动下载,这似乎有效。
header('Content-Disposition: filename="filetodownload.jpg"');
事实上,服务器直接为您的文件提供服务,因此您无法通过HTML与其进行交互,因为HTML根本不涉及。
答案 1 :(得分:40)
当他们点击按钮下载文件时,您可以添加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>
答案 2 :(得分:1)
答案 3 :(得分:0)
这必须在服务器端完成。您必须在某个数据库中具有旧文件名,然后您可以将其移动到具有正确名称的临时文件夹并将该文件发送给用户。 TBQH我认为您应该考虑避免与子目录发生名称冲突,并将路径存储到数据库中的每个文件而不是旧名称/新名称。
答案 4 :(得分:0)
嗯,@ Palantir的回答是,对我来说,最正确的方式!
如果您计划将其与多个文件一起使用,那么我建议您使用(或制作一个)PHP下载管理器。
但是,如果您想将其转换为一个或两个文件,我会建议您使用mod_rewrite选项:
您必须在 htdocs 文件夹中创建或编辑 .htaccess 文件,然后添加:
RewriteEngine on
RewriteRule ^abc\.txt$ xyz.txt
使用此代码,用户将下载名称为 abc.txt
的 xyz.txt 数据注意:验证您的文件上是否已经存在“ RewriteEngine on ”,如果是,则只为要重定向的每个文件添加 second 。
祝你好运;) (对不起我的英文)