Amazon web services 在AWS PHP'中指定内容类型;s上传功能
我正在将我的代码从AWS PHP SDK1迁移到SDK2() 我有一个图像上传器。 在我以前的版本中,我会指定图像的内容类型,如下所示:Amazon web services 在AWS PHP'中指定内容类型;s上传功能,amazon-web-services,amazon-s3,aws-php-sdk,Amazon Web Services,Amazon S3,Aws Php Sdk,我正在将我的代码从AWS PHP SDK1迁移到SDK2() 我有一个图像上传器。 在我以前的版本中,我会指定图像的内容类型,如下所示: $response = $this->s3->create_object( $bucket, $key, array( 'fileUpload'=>$file_resource,
$response = $this->s3->create_object(
$bucket,
$key,
array(
'fileUpload'=>$file_resource,
'contentType'=>$mime,
'acl' => AmazonS3::ACL_PUBLIC,
)
);
这是我的新版本:
$response = $this->s3->upload(
$bucket,
$key,
$file_resource,
'public-read',
array('params' => array('Metadata' => array('ContentType'=>$mime)))
);
我尝试过ContentType的不同拼写,在S3站点中,它将名称修改为“x-amz-meta-ContentType”,而“Content Type”的值是默认的“二进制/八位字节流”
我也尝试过使用EntityBody功能,但结果相同:
$response = $this->s3->upload(
$this->bucket,
$to,
EntityBody::factory($file_resource),
'public-read',
array('params' => array('Metadata' => array('ContentType'=>$mime)))
);
如何在这个新API中设置内容类型
编辑:我在文档中看到:
AWS SDK for PHP将尝试自动确定
用于存储对象的适当内容类型标头。如果你是
使用不太常见的文件扩展名,并且您的内容类型头不可用
自动添加,您可以通过传递
将ContentType选项添加到该操作
首先,我上传的是简单的图像,但根据我的S3仪表盘,它们被上传为“二进制/八位字节流”。关于他们的第二点,我已经尝试了许多带有“ContentType”的数组组合,我不知道为什么它不起作用
最后,这组选项起了作用:
array('params' => array('ContentType' => $mime))
不需要元数据我相信较新的AWS API版本要求直接设置内容类型,例如:
$client->putObject([
'Bucket' => $sBucket,
'Key' => $sPath,
'SourceFile' => $sData,
'ContentType' => $sMimeType]);
1) 据我所知,upload()在后台使用putObject,是文件上传的推荐解决方案。2) 是源的文件扩展名,还是目标名称的文件扩展名?我的目的地是小写的,源代码来自PHP的临时上传位置——我认为它没有扩展。3) 正如所料,大多数图像扩展都在该列表中。“源”文件是
$\u文件[“avatar文件”][“tmp\u名称”]
,使用PHP处理上传的文件。如果我错了,请纠正我,但我相信PHP生成的临时名称不会保留文件扩展名…我个人使用finfo(FILEINFO\u MIME\u TYPE)
来检测MIME类型,我曾经将其传递给AWS SDK。在我切换到新的SDK之前工作得很好。这真的很奇怪。与aws-sdk-php-3.19.8、ubuntu 14.04配合使用效果良好。php-5.5.9