Загрузите файл, сохраненный на Amazon S3 с помощью php

0

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

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

$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;
Теги:
amazon-web-services
amazon-s3
download

2 ответа

1

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

somthing like:

$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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню