所以我将文件存储在Amazon S3上。我的客户从我们的网站下载这些文件,他们点击下载并将信息发送到我们的download.php页面(客户看不到这个页面),但它使用PHP获取文件名和路径(下面的代码) 。但我们遇到的问题是它没有告诉浏览器文件大小,因此当客户下载时,他们会看到“剩余时间未知”。我怎样才能使download.php页面能够获取该信息并单独传递?
<?php
$file_path = "http://subliminalsuccess.s3.amazonaws.com/";
$file_name = $_GET['download'];
$file = file_get_contents('$file_name');
header('application/force-download');
header( 'Content-Type: application/octet-stream' );
header('Content-Disposition: attachment; filename="'.$file_name.'"');
$pos = strpos($file_name, "http");
if ($pos !== false && $pos == 0)
{
readfile($file_name);
} else readfile($file_path.$file_name);
?>
答案 0 :(得分:1)
这很容易。看,当你执行file_get_contents()时,可以使用strlen()获取文件大小。然后在响应中发送Content-Length标头。
<?php
$file_path = 'http://subliminalsuccess.s3.amazonaws.com/';
$file = trim($_GET['download']);
$file_name = $file_path.$file;
$file_contents = file_get_contents($file_name)
OR die('Cannot get the file: '.$file);
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream');
header('Content-Length: '.strlen($file_contents));
header('Content-Disposition: attachment; filename="'.basename($file).'"');
echo $file;
顺便说一句,你的代码中有很多错误。例如,您读取文件两次,一次使用file_get_contents(),第二次使用readfile()。 $ file_name变量没有URI。 file_get_contents('$ file_name')也是错误的。
另外,你不检查传入的URL,但只是readfile()它不好,因为有人可能会将任何URL传递给你的脚本......