2016-04-04 14 views
3

Benim AppEngine projem, bir Android İstemcisine tekrar gönderilebilir bir URL gönderen ve ardından bir resim yüklemek için bu tekrarlanan URL'yi kullanan bir API yöntemine sahiptir.google bulut depolama nesnesinin var olup olmadığını kontrol edin (App Engine Java)

İmzalı bir URL oluşturan ve döndüren başka bir API yöntemim var. İmzalanan URL’de Google Cloud Storage grubu ve nesne adını belirtmeniz gerekir. Ancak, bu nesne mevcut olmayabilir, bu durumda, imzalı URL elbette işe yaramayacaktır.

İmzalı URL'yi vermeden önce App Engine arka ucumda bir nesnenin (bir pakette) olup olmadığını hızlı bir şekilde nasıl kontrol edebilirim?

DÜZENLEME: App Engine projem bir Cloud Uç Nokta projesidir.

+0

Nasıl kayboldu? :) Eğer nesnenin adını biliyorsanız, kendiniz silmeden ve veritabanınızı güncellemeyi unutmamışsanız hala orada olmalıdır. –

+0

@AndreiVolgin Mobil uygulamamın kullanıcıları için GCS'de "profile_photo_user_" + kullanıcı adı "gibi görünen bir profil fotoğrafı saklıyorum. Ancak, yeni kullanıcılar henüz bir fotoğraf yüklememiş olabilir. Her iki şekilde de, onların profil fotoğrafını alırım. Bu yüzden imzalı URL henüz mevcut olmayan bir resmi işaret edebilir. Yorumunuz, profil fotoğraflarını saklamak/almak için bu stratejiyi yeniden gözden geçirmem gerekiyor gibi görünüyor :) Şimdiye kadar, bir kullanıcının bir web sitesine bir ad yükleyebilmesi için bir kullanıcının tekrarlanabilir URL üzerinden ne zaman yükleyeceğini bilmiyorum. örnek. – Micro

+0

Profil fotoğrafı kadar küçük bir şey için tekrar yüklenebilir bir yüklemeye mi ihtiyacınız var? Yeniden yüklenebilen yüklemeler, birçok MB'de veya hatta GB'de ölçülen dosyalar içindir. Küçük dosyalar için daha yavaş/daha az verimli olabilir. Bunun yerine, bir 'getUploadUrl' yöntemini kullanırsanız, karşıya yüklendikten sonra dosya ayrıntılarını içeren sunucunuza bir geri bildirim alırsınız ve bu noktada veritabanını güncelleyebilirsiniz (örneğin" fotoğraf kullanılabilir "seçeneğini" doğru "olarak ayarlayın). –

cevap

1

Nesnenin indirilmeden mevcut olup olmadığını kontrol etmek için getMetadata numaralı telefonu arayabilirsiniz.

GcsService fileService = GcsServiceFactory.createGcsService(); 
GcsFilename file = new GcsFilename(bucket, object); 
fileService.getMetadata(file); 

Alternatif olarak, (gerekirse nesnenin adını eşit olabilir) belirtilen öneki ile başlayan bir kovaya bir kova tüm nesneleri veya tüm nesneleri listeleyebilirsiniz.

GÜNCELLEME:

Müvekkilimle uploadURL göndermek nasıl budur:

@Override 
public String getUploadUrl() throws LoginException, VersionException { 
    // Verify that call is from a registered user and with proper headers 

    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 
    String callbackUrl = "/blob"; 
    return blobstoreService.createUploadUrl(callbackUrl, 
      UploadOptions.Builder.withGoogleStorageBucketName("myBucket)); 
} 
+1

'getMetadata'yı nerede yapıyorsunuz? App Engine'de bu gibi bir nesne alabilirim 'Storage.Objects.Get getObject = storage.objects(). Get (" bucketName ", objName);' ama bir şey görmüyorum: getObject.getMetadata' .. – Micro

+1

App Engine için istemci kütüphanesi kullanmıyorsunuz. Cevabım için bir snippet ekleyeceğim. Cloud Storage'a GAE dışı erişim için daha uygun bir API kullanıyorsunuz. Ve GAE dışı erişim için bile, kullandığınız kodun üzerine kurulmuş olan yeni Gcloud API'sini kullanmak daha iyidir, ancak kullanımı daha kolaydır. –

+0

Bu API'yi kullanmalısınız: https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/using-cloud-storage Özellikle App Engine için tasarlanmış olup kullanımı daha kolaydır. –