Javascript 什么';下载php生成的文件的最佳方式是什么?
我正在使用jquery$.post请求生成一个gpx文件。post请求然后返回文件保存时使用的唯一id。现在我想下载这个文件,但将文件的名称从唯一id更改为用户在输入div中指定的名称 我一直在研究,似乎这是不可能使用另一个post请求发送名称数据 我无法使用location.href,因为文件名需要更改,我需要在下载请求中发送新名称 如何解决这个问题?您可以使用php rename()函数。通过另一个post请求,您可以传递唯一的名称和用户选择的名称。重命名文件并将其名称作为响应发送。然后,使用jQuery,您可以对响应执行任何操作。所以它是:Javascript 什么';下载php生成的文件的最佳方式是什么?,javascript,php,jquery,Javascript,Php,Jquery,我正在使用jquery$.post请求生成一个gpx文件。post请求然后返回文件保存时使用的唯一id。现在我想下载这个文件,但将文件的名称从唯一id更改为用户在输入div中指定的名称 我一直在研究,似乎这是不可能使用另一个post请求发送名称数据 我无法使用location.href,因为文件名需要更改,我需要在下载请求中发送新名称 如何解决这个问题?您可以使用php rename()函数。通过另一个post请求,您可以传递唯一的名称和用户选择的名称。重命名文件并将其名称作为响应发送。然后,使
header('Content-Type: application/pdf;charset=UTF-8');
header('COntent-Disposition: attachment; filename="MyStrangeName.pdf"');
header('Content-Length: ' . filesize($realFile));
readfile($realFile);
这还允许您通过$\u会话确定下载程序确实有权下载文件
对于非常大的文件量,我建议您采用uniquename plus文件树解决方案,例如a la Squid
uniqueid = 4fd3ea17 // Unique file ID
file = downloads/4f/d3/4fd3ea17
因此,每个目录最多只包含65536个文件
然后在mod rewrite的帮助下,您可以发送
Location: http://www.yoursite.com/download/4fd3ea17
(不要忘记拒绝对下载目录的直接访问和索引)为什么不在初始post请求中发送名称,并以正确的名称创建文件?因为我想防止在使用不同用户创建大量不同文件时意外覆盖文件。我想我只是要为文件创建一个唯一的文件夹,并在第一次将其命名为:)谢谢你可以这样做,为每个用户创建一个文件夹等等。另一个选项,我更喜欢的方法是在文件名的末尾附加一个时间戳。时间戳是个好主意,我没想到。谢谢这可能是一个奇怪的问题(因为我不知道你的项目,你也没有提供多少信息),但是,为什么你不用文件名而不是文件名来回答呢?使用@LSerni的答案并立即将文件返回给客户端,而不是触发获取文件请求的ID?在将文件返回给客户端之前,您可以将文件名更改为您想要的任何名称。另外,使用
$.post
向服务器发送数据(并获取响应),使用$.get
向服务器请求数据(作为响应)。当然,您可以使用$.ajax
并在参数中指定类型。是的,这很有意义,但我不知道他是否希望使用唯一的id上载它,然后更改文件名。他问我如何给它重新命名,我告诉他怎么命名。如果他真的想要一个唯一的id,那么创建一个具有唯一id的目录并将正确命名的文件存储在其中是有意义的。这很公平,但是您的方法实际上会重命名该文件,并给出与正确命名文件完全相同的结果。现在,如果您的方法生成了一个类似于copy($file,$newfile)
的文件副本,那么它将更有意义(将原始文件保留在唯一id下,以便稍后再次使用)