2017-07-01 61 views
-1

我正在使用jquery $ .post请求来生成一个gpx文件。发布请求然后返回文件已被保存的唯一ID。现在我想下载这个文件,但是将文件的名称从唯一标识更改为用户在输入格区中指定的名称。下载一个php生成的文件的最佳方式是什么?

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

我不能使用location.href,因为文件名需要改变,我需要发送新的名称与下载请求。

我该如何解决这个问题?

+1

为什么不在初始邮寄名请求并使用正确的名称创建文件以开始? – DelightedD0D

+0

,因为我想在不同用户创建大量不同的文件时无意中覆盖文件。猜我只是要为该文件创建一个独特的文件夹,并在第一时间将其命名为正确:)感谢 –

+0

你可以做到这一点,为每个用户创建一个文件夹等另一种选择,我的首选方法是追加一个时间戳到文件名的末尾。 – DelightedD0D

回答

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 plus文件树解决方案,例如Squid。

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

所以每个目录最多只能包含65536个文件。

然后从国防部重写一点点帮助,您可以发送

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

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

-2

您可以使用php rename()函数。通过另一个发布请求,您可以传递唯一的名称和用户选择的名称。您重命名该文件并将其作为响应发送。然后用jQuery,你可以做任何你想要的回应。因此,它是:

  1. 发送到PHP脚本与rename()函数的唯一名称,新名称
  2. 将脚本重命名文件,并发送新名称。员额$响应
  3. 使用jQuery做任何你想要的回应。
+0

为什么?只是第一次命名它 – DelightedD0D

+0

是的它是有道理的,但我不知道他是否要用一个唯一的ID上传它,然后更改文件的名称。他问如何重命名它,我告诉他如何。如果他真的想要一个唯一的ID,那么有意义的东西就是创建一个具有唯一ID的目录,并在其中存储正确命名的文件。 –

+1

不够公平,但你的方法实际上会重命名文件,给出与第一个地方正确命名相同结果的文件。现在,如果你的方法用'copy($ file,$ newfile)'产生了一个* copy *的文件,它会更有意义(也许稍后将原始文件留在唯一的id下面) – DelightedD0D

相关问题