我将最多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);
答案 0 :(得分:1)
你可以做你在第一次做的事情。如果没有扩展名,则无法正确检测内容类型。
如果你知道文件的内容类型是什么,你可以使用'ContentType' => 'image/jpeg'
手动设置它作为putObject参数的一部分。