从表格$ _FILE [] multipart上传AWS php putObject到S3

时间:2014-03-22 20:24:01

标签: php file-upload sdk amazon-ec2 amazon-s3

我将最多4张图片从多部分表单上传到apache服务器。我目前正在迁移到Amazon S3进行存储,并且我想知道最佳选择。

1)我的php脚本目前首先将图像作为临时文件上传到Ec2服务器,例如名为phpwG3oTb。然后我通常会move_uploaded_file重命名它并将其移动到正确的目录。使用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。为此文件提供的网址为https://url.amazonaws.com/site-dev/folder_1/phpwG3oTb

当我点击它时,图像被下载并且没有显示在浏览器中,因为我猜它没有mime_type。如果我上传与image.jpg相同的图像,它可以正常工作。

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

2)下一个可能不是取这个$ _FILE []文件并将其上传到Ec2服务器然后调用putObject。也许我可以直接从数组内存中取出文件并将其写入putObject中。我不确定那是怎么回事。我在伪代码中思考如下:

$result = $this -> s3Client -> putObject(array('Bucket' => $this -> bucket, 'Key' => 'file_1', 'SourceFile' => $_FILE["<ref_file>"], 'ACL' => 'public-read);

1 个答案:

答案 0 :(得分:1)

你可以做你在第一次做的事情。如果没有扩展名,则无法正确检测内容类型。

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