ECS: S3 Nesnesinin varlığını kontrol etme
Summary: S3 içinde nesne varlığını kontrol etme.
Instructions
Bir nesnenin varlığını daha verimli bir şekilde kontrol etmek için HEAD kullanma.
Nesne listeleme, belirli bir nesnenin varlığını kontrol etmek için doğası gereği verimsiz bir yoldur. Dizin araması yalnızca bu özel istek için nispeten yavaş olmakla kalmaz, aynı zamanda genel yükü ve performansı da etkileyebilir.
Belirli bir nesneyi istemek, parametrelerle eşleşen bir veya daha fazla nesneyi istemekten her zaman daha verimlidir. Nesne listeleme, dağıtılmış dizinlerin sorgulanması gereken bir arama şeklidir.
Nesne üzerinde HEAD kullanmak, nesnenin var olup olmadığını kontrol etmenin en iyi yöntemidir. ECS nesne SDK'sı ile bu GetObjectMetadataRequest ile yapılır.
Nesne mevcut değilse, SDK 404 hata yanıtı nedeniyle aşağıdaki özel durumu oluşturur:
Exception in thread "main" com.emc.object.s3.S3Exception: Not Found
getObjectMetadata istemci yönteminde kullanılan GetObjectMetadataRequest kullanımına ilişkin bir örnek aşağıda verilmiştir:
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(<bucket>, <key>); S3ObjectMetadata om = s3.getObjectMetadata(gom); System.out.println("etag: " + om.getETag()); System.out.println("last modified: " + om.getLastModified().toString()); } catch(com.emc.object.s3.S3Exception e) { System.out.println("What happened: " + e.getMessage()); }
AWS java SDK'sı kullanılıyorsa ve nesne mevcut değilse SDK aşağıdaki istisnayı oluşturur.
com.amazonaws.services.s3.model.AmazonS3Exception: Not Found
İşte buna bir örnek:
try { GetObjectMetadataRequest gom = new GetObjectMetadataRequest(AWSS3Factory.S3_BUCKET, key); s3.getObjectMetadata(gom); } catch(com.amazonaws.services.s3.model.AmazonS3Exception e) { System.out.println("What happened: " + e.getMessage()); }
putObject gerekip gerekmediğini belirlemek için nesnenin mevcut olup olmadığını kontrol edin.
putObject gerekip gerekmediğini belirlemek için nesne varlığını kontrol ediyorsanız, PutObjectRequests koşullu yöntemlerini kullanmayı göz önünde bulundurun:
withIfMatch() and withIfNoneMatch().
Bu yöntemlerin her ikisi de bir nesne etag değerine ihtiyaç duyar ve PUT isteğinde "if-match","if-none-match" üst bilgilerini kullanır.
Ayrıca, her biri bir Date nesnesi alan withIfUnmodifiedSince() ve withIfModifiedSince() yöntemleri de vardır.
etag veya md5 kullanılamıyorsa, bir GetObjectMetadataRequest ile almak gerekir.
Etkili bir alternatif, Tarih yeterince eskiyse withIfUnmodifiedSince() kullanmak olabilir.
ECS teknik desteği ile SR
Bir nesnenin varlığıyla ilgili bir endişe varsa ECS destek ekibiyle bir servis isteği açın.