从S3下载获取文件大小

时间:2012-05-25 00:15:21

标签: php

所以我将文件存储在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);

?>

1 个答案:

答案 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传递给你的脚本......