我将从网站上传的文档保存在亚马逊的S3中。我用一个唯一的散列存储文件,以消除重复的可能性。
我可以用正确的文件名将文件下载到服务器上。
如何将文件下载到用户浏览器而不是服务器?我使用DonovanSchonknecht的S3库,并使用S3::getObject读取文件。
其他可能性,是否可以链接一个URLhttps://s3.amazonaws.com/myfolder/d_b5592038c76db88c4c6113d1fb166fe8e9b1b7b3.pdf并将其作为myfile.pdf下载到浏览器?
我不想先将文件下载到服务器,然后再下载到用户。
感谢您的评论和电子邮件线索。。。解决方案是使用头和readfile。我用了大卫·沃尔什的头球例子http://davidwalsh.name/php-force-download并将其与php的readfile相结合。readfile读取具有哈希名称的文件,头文件则使用另一个名称保存该文件。原始文件名或位置从未向公众显示。以下是一些有用的php代码:
// get doc details
$stmt = $conn->prepare("SELECT * FROM docs WHERE docs_hash = :hash LIMIT 1 ");
$stmt->execute(array(':hash' => $docs_hash));
$result = $stmt;
if ($result->rowCount() > 0) {
foreach($result as $row) {
$docs_filename = $row['docs_filename'];
$docs_extension = $row['docs_extension'];
$docs_downloaded = $row['docs_downloaded'];
$download_file = "doc_" . $docs_hash . "." . $docs_extension;
}
// echo "File 1: $download_file <br>";
// echo "File 2: $docs_filename <br>";
// echo "Bucket: " . _AWS_BUCKET_ . "<br>";
// required for IE
if (ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); }
// get the file mime type using the file extension
switch(strtolower(substr(strrchr($docs_filename, '.'), 1))) {
case 'pdf': $mime = 'application/pdf'; break;
case 'zip': $mime = 'application/zip'; break;
case 'jpeg':
case 'jpg': $mime = 'image/jpg'; break;
default: $mime = 'application/force-download';
}
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private', false);
header('Content-Type: ' . $mime);
header('Content-Disposition: attachment; filename="' . basename($docs_filename) . '"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
readfile("https://s3.amazonaws.com/" . _AWS_BUCKET_ . "/" . $download_file);
exit();
}
您可以尝试AWS-SDK(官方)。其主要思想是从S3服务中获得一个签名的url,这样您就可以为您的网站用户提供下载链接,而无需实现服务器端代码。你可以完全用Javascript来实现它。
有关以下方面的详细信息:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-属性