2


我有另一个与亚马逊有关的问题及其与文件上传有关的问题。我正在使用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; 

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

4

1 回答 1

1

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

我喜欢建议以下方法: 方法 1. 在上传过程中不要调整大小!仅在第一次请求时即时创建调整大小的版本,并缓存生成的图像以直接为以后的请求提供服务。我在 Stackoverflow的其他一些线程中看到了一些关于 Amazon CloudFront 作为解决方案的提及。

方法 2. 在上传原始图像后,调用用于创建调整大小版本的代码作为单独的异步请求。可用的缩放版本将有所延迟。因此,编写必要的代码以在网站中显示一些占位符图像,直到缩放版本可用。您必须想办法确定缩放版本是否可用(例如检查文件是否存在,或在数据库中设置一些标志)。如果您想尝试一下,这里推荐了一些进行异步 cURL 请求的方法。

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

一些其他方法被建议作为这个其他问题的答案

于 2013-07-10T10:04:17.873 回答