下载php生成的文件的最佳方法是什么?

时间:2017-07-01 20:07:27

标签: javascript php jquery

我正在使用jquery $ .post请求来生成gpx文件。然后,post请求返回文件保存的唯一ID。现在我想下载此文件,但是将文件的名称从唯一ID更改为用户在输入div中指定的名称。

我一直在研究,似乎使用其他发布请求来发送名称数据是不可能的。

我无法使用location.href,因为文件名需要更改,我需要使用下载请求发送新名称。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

  

我无法使用location.href,因为文件名需要更改,我需要使用下载请求发送新名称。

是的,你可以。

只是不发送文件名位置,而是发送将检索正确的文件的PHP脚本的位置,无论其名称是什么(例如,唯一的),然后检索正确的本地名称(例如,从$ _SESSION),并发送适当的标题:

header('Content-Type: application/pdf;charset=UTF-8');
header('COntent-Disposition: attachment; filename="MyStrangeName.pdf"');
header('Content-Length: ' . filesize($realFile));
readfile($realFile);

这也允许您通过$ _SESSION建立下载器真正有权下载文件。

对于非常大的文件数量,我建议你采用uniquename加文件树解决方案,例如鱿鱼,

uniqueid = 4fd3ea17 // Unique file ID
file     = downloads/4f/d3/4fd3ea17

因此每个目录最多只包含65536个文件。

然后在mod-rewrite的帮助下你可以发送

Location: http://www.yoursite.com/download/4fd3ea17

(不要忘记拒绝直接访问和下载目录的索引)

答案 1 :(得分:-2)

您可以使用php rename()函数。使用另一个发布请求,您可以传递用户选择的唯一名称和名称。您重命名该文件并将其名称作为响应发送。然后使用jQuery,您可以使用响应执行任何操作。所以它是:

  1. 使用rename()函数向php脚本发送唯一名称和新名称
  2. 使脚本重命名该文件,并将新名称作为$ .post response
  3. 发送
  4. 使用jQuery通过响应做任何你想做的事。