AWS php putObject从表单$\u文件[]多部分上载到S3

AWS php putObject从表单$\u文件[]多部分上载到S3,php,file-upload,sdk,amazon-ec2,amazon-s3,Php,File Upload,Sdk,Amazon Ec2,Amazon S3,我正在从一个多部分表单向apache服务器上传多达4个图像。我目前正在迁移到AmazonS3进行存储,我想知道最好的选择是什么 1) 我的php脚本目前首先将一个图像作为临时文件上传到Ec2服务器,例如名为phpwG3oTb的服务器。然后我通常会移动上传的文件来重命名它,并将其移动到正确的目录。使用AWS PHP SDK for S3,我可以看出我可以避免这种情况,并使用putObject直接将其上载为: $result = $this -> s3Client -> putObjec

我正在从一个多部分表单向apache服务器上传多达4个图像。我目前正在迁移到AmazonS3进行存储,我想知道最好的选择是什么

1) 我的php脚本目前首先将一个图像作为临时文件上传到Ec2服务器,例如名为phpwG3oTb的服务器。然后我通常会移动上传的文件来重命名它,并将其移动到正确的目录。使用AWS PHP SDK for S3,我可以看出我可以避免这种情况,并使用putObject直接将其上载为:

$result = $this -> s3Client -> putObject(array('Bucket' => $this -> bucket, 'Key' => 'file_1', 'SourceFile' => 'phpwG3oTb', 'ACL' => 'public-read);
但是,S3存储桶上的文件现在称为phpwG3oTb,密钥为file_1。为该文件提供的url为

当我点击这个图片时,它会被下载,不会显示在浏览器中,因为我猜它没有mime_类型。如果我上传与image.jpg相同的图像,效果很好

为了避免这种情况,我需要将本地上传的文件重命名为image.jpg,然后使用putObject。我想避免这一步

2) 下一个方法可能不是将这个$\u文件[]上传到Ec2服务器,然后调用putObject。也许我可以直接从数组内存中获取文件,并以某种方式将其写入putObject。我不知道这怎么可能。我在想伪代码,比如:

$result = $this -> s3Client -> putObject(array('Bucket' => $this -> bucket, 'Key' => 'file_1', 'SourceFile' => $_FILE["<ref_file>"], 'ACL' => 'public-read);
$result=$this->s3Client->putObject(数组('Bucket'=>$this->Bucket,'Key'=>'file\u 1','SourceFile'=>$\u file[“”],'ACL'=>'公共读取);

您可以执行第一个扩展中的操作。如果没有扩展,它将无法正确检测内容类型

如果您知道文件的内容类型,则可以使用作为putObject参数的一部分的
'ContentType'=>'image/jpeg'
手动设置它