2015-01-13 5 views
0

У меня есть следующий код, который успешно отображает файл, сохраненный на S3, в браузере, но я хотел бы иметь возможность загрузить файл на компьютер клиента.Загрузить файл, хранящийся на Amazon S3, с помощью php

Что мне нужно сделать?

$result = S3::getObject($Bucketname,$uri); 
header("Content-Type: ".$result->headers['type']); 
die($result->body); 

Я попытался следующие, но он просто загружает файл нечитаемым ...

$result = S3::getObject($Bucketname,$uri); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=test.pdf'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . strlen($result->body)); 
ob_clean(); 
flush(); 
readfile($result->body); 
exit; 

ответ

1

вы можете создать URL-адрес загрузки, используя метод getObjectUrl

Somthing как:

$downloadUrl = $s3->getObjectUrl($bucketname, $file, '+5 minutes', array(
       'ResponseContentDisposition' => 'attachment; filename=$file,'Content-Type' => 'application/octet-stream', 
     )); 

и передать этот URL-адрес пользователю. который направит пользователя на страницу amzon, которая запустит загрузку файла (ссылка будет действительна в течение 5 минут, но вы можете это изменить)

другой вариант, сначала сохраняет этот файл на ваш сервер, а затем пусть пользователь загрузит файл с вашего сервера

0

Вы пытаетесь загрузить pdf-файл в виде данных двоичного содержимого.

Использовать ответ вашего запроса GetObject, чтобы получить правильный тип MIME-тип:

$result = S3::getObject($Bucketname,$uri); 
header('Content-Description: File Transfer'); 
header('Content-Type: ' . $result['ContentType']); 
header('Content-Disposition: attachment; filename=test.pdf'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header('Content-Length: ' . strlen($result->body)); 
ob_clean(); 
flush(); 
readfile($result->body); 
exit; 
Смежные вопросы