2013-08-05 41 views
8

Chức năng có tạm dừng tập lệnh php cho đến khi tìm thấy đối tượng trên máy chủ s3 không?waitUntilObjectExists() Phương thức SDK PHP của Amazon S3, chính xác nó hoạt động như thế nào?

Tôi có nó trong vòng lặp foreach, tải từng ảnh một lên. Sau khi tìm thấy đối tượng, tôi gọi phương thức xóa ảnh cục bộ, sau đó xóa thư mục cục bộ nếu trống. Đây có phải là một cách thích hợp để đi về nó? Cảm ơn

    foreach ($fileNames as $fileName) 
        { 

         $imgSize = getimagesize($folderPath . $fileName); 

         $width = (string)$imgSize[0]; 
         $height = (string)$imgSize[1]; 

         //upload the images 
         $result = $S3->putObject(array(
          'ACL'  => 'public-read', 
          'Bucket'  => $bucket, 
          'Key'  => $keyPrefix . $fileName, 
          'SourceFile' => $folderPath . $fileName, 
          'Metadata' => array(
           'w' => $width, 
           'h' => $height 
          ) 
         )); 

         $S3->waitUntilObjectExists(array(
         'Bucket' => $bucket, 
         'Key' => $keyPrefix . $fileName)); 

         $this->deleteStoreDirectory($folderPath, $fileName); 
        } 

Trả lời

12

waitUntilObjectExists cơ bản là một bồi bàn rằng định kỳ kiểm tra (các cuộc thăm dò) S3 tại các khoảng thời gian cụ thể để xem nếu tài nguyên có sẵn. Việc thực thi tập lệnh bị chặn cho đến khi tài nguyên được đặt hoặc đạt đến số lần thử lại tối đa.

Như các tài liệu AWS định nghĩa chúng:

Bồi bàn giúp làm cho nó dễ dàng hơn để làm việc với các hệ thống cuối cùng phù hợp bằng cách cung cấp một cách dễ dàng để chờ cho đến khi một nguồn lực tham gia vào một trạng thái đặc biệt bằng cách bỏ phiếu tài nguyên.

Theo mặc định, người phục vụ waitUntilObjectExists được định cấu hình để cố định vị trí tài nguyên 20 lần, với độ trễ 5 giây giữa mỗi lần thử. Bạn có thể ghi đè các giá trị mặc định này với các giá trị mong muốn bằng cách chuyển các tham số bổ sung vào phương thức waitUntilObjectExists.

Nếu người phục vụ không thể định vị tài nguyên sau số lần thử tối đa, nó sẽ ném một ngoại lệ.

Bạn có thể tìm hiểu thêm về người phục vụ tại địa chỉ:

http://docs.aws.amazon.com/aws-sdk-php-2/guide/latest/feature-waiters.html

Đối với trường hợp sử dụng của bạn, tôi không nghĩ rằng nó làm cho tinh thần để gọi waitUntilObjectExists sau khi bạn đã tải lên các đối tượng, trừ khi cùng một kịch bản PHP cố gắng lấy cùng một đối tượng từ S3 sau này trong mã.

Nếu cuộc gọi API putObject trả về thành công, thì đối tượng cuối cùng sẽ hiển thị trong S3 và bạn không nhất thiết phải chờ điều này xảy ra trước khi bạn xóa các tệp cục bộ.

+0

Ok, cảm ơn người đàn ông. Làm cho ý nghĩa hơn bây giờ –

+0

Đúng, bạn không cần người phục vụ trừ khi bạn cần truy cập ngay lập tức đối tượng. –

+0

Trong trường hợp của tôi, tôi cần truy cập vào đối tượng ngay sau khi tôi chuyển nó vào thùng S3. Vấn đề trong tình huống này là một số thời gian, đối tượng sẽ tồn tại trong thùng khi nó được yêu cầu, nhưng vì nó sẽ không hoàn thành việc truyền tải, tôi kết thúc với một trong hai hình ảnh không đầy đủ ở cuộc gọi getObject đầu tiên, hoặc không có tất cả các. –

Các vấn đề liên quan