使用ajax下载文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ajax下载文件相关的知识,希望对你有一定的参考价值。

我试图为我的RaspberryPi创建某种云。用户可以登录,上传和下载他们有权访问的文件。

为了提供这种安全性,文件存储在目录“/ var / www / files /”中,因此在某个地方浏览器无法直接访问它们。

通过php,应启动下载(在检查用户权限后)。

上传文件的逻辑,并显示我已经实现的存储文件,但我很难找到如何下载文件的解决方案。

上传正在使用ajax调用,不确定是否可以使用该方法进行下载。

答案

您可以使用PHP下载网站根目录之外的文件。这很简单:

<?php

$path = <path to the file to be downloaded>;

readfile($path);

见:http://php.net/manual/en/function.readfile.php

确保您可以访问该文件,并将此PHP代码放在浏览器可访问的文件中。使用几个标题,您可以使它更好:

<?php

$path = <path to the file to be downloaded>;
$name = 'Your download name';    
$size = filesize($path);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$name); 
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: '.$size);

readfile($path);

但最终它完全一样。如果您想进行一些身份验证,可以在PHP中执行此操作。

以上是关于使用ajax下载文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 AJAX 调用下载 PHPExcel 文件

用于下载文件的php代码不适用于ajax [重复]

代码适用于与单个 html 文件不同的堆栈片段

使用 Java、Struts 2 和 AJAX 下载文件

Javascript代码片段在drupal中不起作用

使用ajax在Django中将数据下载为Excel文件