AWS使用SQS-PHP语法上传到S3

AWS使用SQS-PHP语法上传到S3,php,amazon-web-services,amazon-sqs,Php,Amazon Web Services,Amazon Sqs,使用SQS上传到S3会使进程更容错吗? 如果是这样,我在语法方面遇到了困难,试图将创建队列与上载到S3结合起来。如果我的逻辑不正确,我将如何使用SQS设置系统以上载到S3 if (!class_exists('S3'))require_once('S3.php'); // *these keys are random strings $AWS_KEY = "6VVWTU4JDAAKHYB1C3ZN"; $AWS_SECRET_KEY = "GMSCUD8C0QA1QLV9Y3RP2IAKDI

使用SQS上传到S3会使进程更容错吗?

如果是这样,我在语法方面遇到了困难,试图将创建
队列
与上载到S3结合起来。
如果我的逻辑不正确,我将如何使用
SQS
设置系统以上载到
S3

if (!class_exists('S3'))require_once('S3.php');

// *these keys are random strings
$AWS_KEY = "6VVWTU4JDAAKHYB1C3ZN";
$AWS_SECRET_KEY = "GMSCUD8C0QA1QLV9Y3RP2IAKDIZSCHRGKEJSXZ4F";

//AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', $AWS_KEY);
if (!defined('awsSecretKey')) define('awsSecretKey', $AWS_SECRET_KEY);
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);

//check whether a form was submitted
if(isset($_POST['Submit'])){

    //retreive post variables
    $fileName = $_FILES['theFile']['name'];
    $fileTempName = $_FILES['theFile']['tmp_name'];

    //create a new bucket
    $s3->putBucket("mybucket", S3::ACL_PUBLIC_READ);




    //add the queue
    $sqs = new AmazonSQS(array( "key" => $AWS_KEY, "secret" => $AWS_SECRET_KEY ));
    $response = $sqs->create_queue('test-topic-queue');
    $queue_url = (string) $response->body->CreateQueueResult->QueueUrl;
    $queue_arn = 'arn:aws:sqs:us-east-1:ENCQ8gqrAcXv:test-topic-queue';

    //$queue_url . ?Action=SendMessage&MessageBody=Your%20Message%20Text?&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Version=2011-10-01?&Expires=2008-02-10T12:00:00Z?&Signature=lBP67vCvGlDMBQ1do?fZxg8E8SUEXAMPLE&SignatureVersion=2&SignatureMethod=HmacSHA256


    // HOW DO I INCORPORATE SQS AND S3



    //move the file
    if ($s3->putObjectFile($fileTempName, 
                                "mybucket", 
                                "myFolder/" . $fileName, S3::ACL_PUBLIC_READ, 
                                array(), 
                                $_FILES['theFile']['type']) ) {
        //it works
    }else{
        // error
    }
}

我不完全理解您要求的容错性。但是在使用S3和SQS进行扩展方面,AmazonAWS网站上有一篇优秀的论文,讨论了同时使用SQS和EC2来扩展和缩小基础设施,其中当然可以包括上传到S3和使用SQS通知应用程序处理某些内容等过程。您没有提到您是否正在使用EC2,或者是否对此感兴趣

以下是文章:


否则,听起来您的逻辑可能会混淆,因为SQS不是从服务器到S3的中间环节,而是应用程序消息传递的中间环节。

我不完全理解您请求的容错性。但是在使用S3和SQS进行扩展方面,AmazonAWS网站上有一篇优秀的论文,讨论了同时使用SQS和EC2来扩展和缩小基础设施,其中当然可以包括上传到S3和使用SQS通知应用程序处理某些内容等过程。您没有提到您是否正在使用EC2,或者是否对此感兴趣

以下是文章:


否则,听起来您的逻辑可能会混淆,因为SQS不是从服务器到S3的中间环节,而是应用程序消息传递的中间环节。

我想我已经了解了OP在这个主题上的混淆

所示的图表显示SQS正在处理上传,但事实并非如此,当您上传1或100张照片时,它们直接添加到S3,然后使用SQS创建一个“任务”,其中一个EC2“处理服务”将拉动该任务,然后从S3存储中获取SQS消息中指定的实际图片


希望这能为那些看到这个问题感到失落的未来用户提供一些见解。

我想我已经理解了OP在这个话题上的困惑

所示的图表显示SQS正在处理上传,但事实并非如此,当您上传1或100张照片时,它们直接添加到S3,然后使用SQS创建一个“任务”,其中一个EC2“处理服务”将拉动该任务,然后从S3存储中获取SQS消息中指定的实际图片


希望这能为那些看到这个问题感到失落的未来用户提供一些见解。

您想合并什么?SQS用于消息传递,而S3用于对象存储。您不能使用SQS使实际上传到S3的过程更具容错性。但是,也许我遗漏了您的问题?其次,我希望您在代码片段中发布的不是您的实际AWS凭据。如果是这样的话,你需要去撤销它们。@oens你没听懂这个句子*这些键是随机字符串。我读到sqs可以放在进程之间,这是我在上传到S3时不确定的部分。是的,sqs可以用来管理组件之间的消息传递。基本上,您在上面所做的是将一个对象(在本例中是一个文件)上载到S3,在上载文件的这个特定过程中,不知道使用SQS(除非您将文件分割成块并存储在消息队列中,但接下来会有什么目的?)。您可以直接执行到S3的上传,而不使用SQS。例如,如果您希望在上载新文件时进行一些处理,则SQS非常有用。然后,您可以在上传时向SQS添加一个条目,以便对新上传的文件进行后端处理。您想要合并什么?SQS用于消息传递,而S3用于对象存储。您不能使用SQS使实际上传到S3的过程更具容错性。但是,也许我遗漏了您的问题?其次,我希望您在代码片段中发布的不是您的实际AWS凭据。如果是这样的话,你需要去撤销它们。@oens你没听懂这个句子*这些键是随机字符串。我读到sqs可以放在进程之间,这是我在上传到S3时不确定的部分。是的,sqs可以用来管理组件之间的消息传递。基本上,您在上面所做的是将一个对象(在本例中是一个文件)上载到S3,在上载文件的这个特定过程中,不知道使用SQS(除非您将文件分割成块并存储在消息队列中,但接下来会有什么目的?)。您可以直接执行到S3的上传,而不使用SQS。例如,如果您希望在上载新文件时进行一些处理,则SQS非常有用。然后你可以在上传时向SQS添加一个条目,对新上传的文件进行后端处理