如何在新选项卡中打开时重命名保存在服务器上的pdf
Posted
技术标签:
【中文标题】如何在新选项卡中打开时重命名保存在服务器上的pdf【英文标题】:How to rename pdf which saved on Server while opening in new tab 【发布时间】:2019-09-10 11:13:15 【问题描述】:我正在编写一个 Web 应用程序,除其他外,它允许用户将文件上传到我的服务器。为了防止名称冲突和组织文件,我将它们放在我的服务器上后重命名。
我的问题是,有没有办法指定要下载的文件的名称。?因此,用户上传了一个名为“abc.pdf”的文件,我将其重命名为“10.pdf”,但是当他们下载它时,我希望浏览器默认将文件保存为“abc.pdf”。有什么办法吗?
我提到了这个问题
How to set name of file downloaded from browser?
但在我的情况下,我在 javascript 的新选项卡中打开 pdf。当点击 pdf 将获得与存储在服务器中的名称相同的 id,该 id 将引用 DB 并使用 ajax 获取实际名称。但是如何将文件名从 id 重命名为实际名称?
$(document).on('click', '.file', function (e)
var id = this.id+'.pdf';
$.ajax(
url: "<?php echo base_url() ?>/Directorylist/files",
type: "POST",
datatype: 'json',
success: function (data)
var actual_name = data;
var win = window.open();
win.location.href="http://localhost:8080/panExplorer/uploads/"+id+"";
,
);
);
【问题讨论】:
答案是一样的,你需要重定向到服务器脚本并将标头放入该脚本中。重定向的触发方式无关紧要。 你能解释一下吗,我只是初学者。 您可以使用"http://localhost:8080/panExplorer/download.php?file=id"
并在download.php 中写入您的标题并从uploads 目录读取pdf 文件。而且我只用 JavaScript 添加了答案。
【参考方案1】:
您可以尝试创建一个标签将其附加到正文(它在 chrome 中没有这个但它需要在 Firefox 中的文档中)并点击它,(您需要调用本机点击而不是 jQuery 方法)。
function download(url, fname)
var a = $('<a/>').attr(
href: url,
download: fname,
target: '_blank'
).appendTo('body');
a[0].click(); // native DOM function
a.remove();
而不是
var win = window.open();
win.location.href="http://localhost:8080/panExplorer/uploads/"+id+"";
使用:
download("http://localhost:8080/panExplorer/uploads/" + id, "some_other.pdf");
编辑:
另一种解决方案是创建 php 文件,该文件将作为下载文件的代理,您使用相同的代码但转发到 php 文件:
var win = window.open();
win.location.href="http://localhost:8080/panExplorer/download.php?file="+id;
在您使用的download.php
文件中:
// and you should check if there are no ".." in the filename,
// so no one will download your source code with `file=../index.php`
readfile("./upload/" . $_GET['file']);
并使用解决方案从How to set name of file downloaded from browser?下载文件
编辑:
如果你需要打开文件但这里没有下载是解决办法:
您需要具有正确名称的 url,因此它需要以 /filename.pdf
结尾,最简单的方法是使用如下所示的 url:
/UploadFiles/id/your_filename.pdf
并且您需要编写脚本(或在您的框架中路由)将打开 id 并忽略文件名,文件名将被浏览器使用。
【讨论】:
@stevin 我假设您要下载文件,这样您就需要使用 htaccess 转发文件的第二种解决方案。这就是您创建具有多个实际运行 index.php 的 URL 的站点的方式。您可以重定向,以便地址栏中的 URL 具有您的姓名并在服务器上打开不同的名称。您还可以重定向到 download.php 并在您的内部命名文件,它是某种模式。 @stevin 如果您不想触发下载并更改名称,唯一的解决方案是使用htaccess
更改网址,您可以采用稍微不同的方式。
其实我想在下载时获取实际名称,而不是自动下载。
@stevin 下载时你想让 id 成为你的名字吗?
@jubic 不是 id,我存储在 DB 中的实际名称。以上是关于如何在新选项卡中打开时重命名保存在服务器上的pdf的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS UI 路由器 - 在新的浏览器选项卡中使用数据打开状态