Amazon S3和jqueryfileupload插件的图像上传性能问题

时间:2013-07-09 09:25:04

标签: php jquery amazon-web-services amazon-s3 jquery-file-upload


我有另一个问题亚马逊及其与文件上传有关。我正在使用jqueryFileUpload和亚马逊API将文件上传到亚马逊S3。我已成功上传它,但它涉及一个技巧。
     我必须将图像存储在我的服务器上,然后使用S3的putObjectFile方法从那里将其移动到S3。现在该插件具有很好的功能来裁剪/调整图像,我一直在使用它们。现在,当我将插件与AWS集成,我正面临性能问题上传。上传时间比平时长,这引发了我们使用AWS S3而不是传统方式的问题。
     我必须对我的UploadHandler.php文件进行更改才能使其正常工作。这些是所做的更改。我将部分AWS上传代码添加到文件中 735到750

     $bucket = "elasticbeanstalk-2-66938761981";
     $s3 = new S3(awsAccessKey, awsSecretKey);
     $response = $s3->putObjectFile($file_path,$bucket,$file->name,S3::ACL_PUBLIC_READ);
     $thumbResponse = $s3->putObjectFile('files/thumbnail/'.$file->name,$bucket,'images/'.$file->name,S3::ACL_PUBLIC_READ);
     //echo $response;
     //echo $thumbResponse;
     if ($response==1) {
        //echo 'HERER enter!!';
     } else {
          $file->error = "<strong>Something went wrong while uploading your file... sorry.</strong>";
     }
     return $file; 

Here是git上s3类的链接。 正常上传到我当前的服务器(不是亚马逊),相同的图片上传 15秒,但在亚马逊S3上需要 23秒,我无法弄清楚一个更好的解决方案。我必须在上传到S3之前将图像存储在我的服务器上,因为我不确定我是否可以处理它们即时并直接上传到S3。
任何人都可以建议解决问题的正确方法?是否可以将图像大小调整到内存中的不同大小并直接上传到S3,避免将其保存到服务器的开销?如果是的话,任何人都可以指导我朝正确的方向发展吗?
感谢您的关注。

1 个答案:

答案 0 :(得分:1)

我相信大约8秒是创建不同大小的图像版本的开销。 您可以采取不同的方法来消除上传时调整大小的开销。基本思路是允许上传脚本完成执行并返回响应,并将调整大小过程作为单独的脚本进行。

我想建议以下方法:  方法1.在上传过程中不要调整大小!仅在第一次请求时动态创建已调整大小的版本,并将生成的图像缓存以便直接用于以后的请求。我在Stackoverflow中的一些other threads中看到了一些Amazon CloudFront的提及。

方法2.在上传原始图像后,调用用于创建调整大小的版本的代码作为单独的异步请求。可用的缩放版本会有延迟。因此,编写必要的代码以在网站中显示一些占位符图像,直到缩放版本可用。您将不得不找出一些方法来确定缩放版本是否可用(例如,检查文件是现有的,或在数据库中设置一些标志)。 making asynchronous cURL requests are suggested here的一些方法,如果您想尝试一下。

我认为这两种方法都具有相同的复杂程度。

其他一些方法被建议为answers for this other question