AWS S3将对象(视频)放入预先签名的URL,不起作用?

时间:2018-04-02 12:41:25

标签: amazon-web-services amazon-s3 aws-sdk aws-php-sdk

我正在使用带有预签名网址的PHP S3 API在S3存储桶上传视频。 mp4视频已成功上传到S3,但它没有流式传输 并没有给出任何错误。

以下是详细信息。

我的PHP文件为S3 putObject方法创建预先烧录的URL。

require 'aws/aws-autoloader.php';
use Aws\S3\S3Client;
use Aws\Exception\AwsException;

$s3Client = new Aws\S3\S3Client([
    'version' => 'latest',
    'region'  => 'ap-south-1',
    'credentials' => [
        'key'    => 'XXXXXXX',
        'secret' => 'XXXXXXX'
    ]
]);

/*echo '<pre>';
print_r($_FILES);die;*/

if(!$_FILES['file']['tmp_name'] || $_FILES['file']['tmp_name']==''){
    echo json_encode(array('status'=>'false','message'=>'file path is required!'));die;
}else{
    $SourceFile =$_FILES['file']['tmp_name'];
    $key=$_FILES['file']['name'];
    $size=$_FILES['file']['size'];
}

try {
$cmd = $s3Client->getCommand('putObject', [
    'Bucket'     => 's3-signed-test',
        'Key'        => $key,
        'SourceFile' => $SourceFile,
        'debug' => false,
        'ACL' => 'public-read-write',
        'ContentType' => 'video/mp4',
        'CacheControl'=>'no-cache',
        'ContentLength'=>$size

]);


$request = $s3Client->createPresignedRequest($cmd, '+120 minutes');

// Get the actual presigned-url
$presignedUrl = (string) $request->getUri();


} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";die;
}

echo json_encode(array('status'=>'true','signedUrl'=>$presignedUrl));die;

此代码工作正常,并在s3存储桶上传视频mp4。

但上传后,当我要访问该视频时,它无效 我也试过过getObject pre-singed url但它没有用。

以下是S3对象网址 -

(1)getObject pre-singedged URL

https://s3-signed-test.s3.ap-south-1.amazonaws.com/file.mp4?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIVUO7AT4W4MCPDIA%2F20180402%2Fap-south-1%2Fs3%2Faws4_request&X-Amz-Date=20180402T112848Z&X-Amz-SignedHeaders=host&X-Amz-Expires=7200&X-Amz-Signature=d6b877f9bba5dd2221381f10017c8659fe42342d81f7af940d8693478679a8fc

(2)S3 Direct对象URL -

https://s3.ap-south-1.amazonaws.com/s3-signed-test/file.mp4

我的问题是我无法访问我在s3存储桶上使用预先登录的网址上传的视频,存储桶权限是公开的,并且可以访问所有来源。

请让我知道,有解决方案的人。

0 个答案:

没有答案