Я пытаюсь сделать так, чтобы мой скрипт покажет test.jpg в ведро Amazon S3 через php. Вот что я до сих пор:
require_once('library/AWS/sdk.class.php'); $s3 = new AmazonS3($key, $secret); $objInfo = $s3->get_object_headers('my_bucket', 'test.jpg'); $obj = $s3->get_object('my_bucket', 'test.jpg', array('headers' => array('content-disposition' => $objInfo->header['_info']['content_type']))); echo $obj->body;
Это просто выгружает данные файла на странице. Я думаю, мне также нужно отправить заголовок content-disposition, который, как я думал, выполняется в методе get_object (), но это не так.
Примечание. Я использую SDK, доступный здесь: http://aws.amazon.com/sdkforphp/
Получил его работу, эхо-сигнал заголовка содержимого до эхо-ответа на тело объекта $.
$objInfo = $s3->get_object_headers('my_bucket', 'test.jpg'); $obj = $s3->get_object('my_bucket', 'test.jpg'); header('Content-type: ' . $objInfo->header['_info']['content_type']); echo $obj->body;
Оба эти метода работают для меня. Первый способ кажется более кратким.
$command = $s3->getCommand('GetObject', array( 'Bucket' => 'bucket_name', 'Key' => 'object_name_in_s3' 'ResponseContentDisposition' => 'attachment; filename="'.$my_file_name.'"' )); $signedUrl = $command->createPresignedUrl('+15 minutes'); echo $signedUrl; header('Location: '.$signedUrl); die();
Или более многословный, но все же функциональный способ.
$object = $s3->getObject(array( 'Bucket' => 'bucket_name', 'Key' => 'object_name_in_s3' )); header('Content-Description: File Transfer'); //this assumes content type is set when uploading the file. header('Content-Type: ' . $object->ContentType); header('Content-Disposition: attachment; filename=' . $my_file_name); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //send file to browser for download. echo $object->body;
Я добавил заголовок Content-Disposition в getAuthenticatedUrl ();
// Example $timeOut = 3600; // in seconds $videoName = "whateveryoulike"; $headers = array("response-content-disposition"=>"attachment"); $downloadURL = $s3->getAuthenticatedUrl( FBM_S3_BUCKET, $videoName, FBM_S3_LIFETIME + $timeOut, true, true, $headers );
Для PHP sdk3 измените последнюю строку ответа Maximus
$object = $s3->getObject(array( 'Bucket' => 'bucket_name', 'Key' => 'object_name_in_s3' )); header('Content-Description: File Transfer'); //this assumes content type is set when uploading the file. header('Content-Type: ' . $object->ContentType); header('Content-Disposition: attachment; filename=' . $my_file_name); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); //send file to browser for download. echo $object["Body"];