【问题标题】:Download file with ajax用ajax下载文件
【发布时间】:2018-03-06 12:01:38
【问题描述】:

我正在尝试为我的 RaspberryPi 创建某种云。用户可以在其中登录、上传和下载他们有权访问的文件。

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

应该通过 PHP 启动下载(在检查用户权限之后)。

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

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

【问题讨论】:

  • Ajax 只是意味着“发出由 JavaScript 触发的 HTTP 请求”。它仍然是浏览器发出的 HTTP 请求。因此,“文件不应存储在浏览器可以访问的路径中”将无济于事,因为要使它们对 Ajax 可用,您必须使它们对浏览器可用。
  • 您不需要使用 AJAX 来下载文件。
  • @Mohsen 看起来您提供的链接是关于在运行客户端的 Windows 系统上创建文件的。我正在寻找一种从服务器加载文件的方法。
  • @Quentin HTTP-Request 应该指向服务器上的 PHP 文件(在浏览器中可访问的路径中),它应该提供文件。这就是如何做到这一点的问题。 (不确定我是否在这里混淆了某些东西)

标签: javascript php ajax file download


【解决方案1】:

您可以使用 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 中进行。

【讨论】:

  • 我只是在寻找感谢。我刚才自己也找到了这个解决方案:)。另外值得一提的是,在 js 中 PHP 需要由 window.location = [php-path] 调用,而不是 http-request。
  • 我刚刚找到的链接(页面底部的Demo):codexworld.com/force-download-file-php
  • 是的,这并不难。哦,window.location = [php-path] 是发出“http 请求”的一种方式。另一种方法是单击链接或按钮:表示&lt;a&gt;&lt;input&gt; html 标记。
猜你喜欢
  • 2015-06-01
  • 2013-10-03
  • 2013-01-29
  • 2012-06-25
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多