Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 在AWS PHP'中指定内容类型;s上传功能_Amazon Web Services_Amazon S3_Aws Php Sdk - Fatal编程技术网

Amazon web services 在AWS PHP'中指定内容类型;s上传功能

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,

我正在将我的代码从AWS PHP SDK1迁移到SDK2()

我有一个图像上传器。 在我以前的版本中,我会指定图像的内容类型,如下所示:

$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”的数组组合,我不知道为什么它不起作用

  • 那么,直接使用肯定会给你你需要的控制

  • 文件扩展名必须是小写的,自动检测才能工作

  • 您可以在中找到支持的mime类型列表


  • 最后,这组选项起了作用:

    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